面向对象(2 )构造函数 原型 原型链的理解

                                     面向对象(2) 原型 原型链的理解

1.面向对象的目的就是生成对象object。

2.生成对象的方式

  (1)单例模式(字面量定义)var obj={}

  (2)类的实例 var obj=new Object()

  (3)工厂模式

  (4)构造函数

    

  工厂模式和构造函数的区别?

    工厂模式,生成的对象必须要返回,构造函数模式不用return,构造函数模式默认return旳是this,在构造函数内的this就是实例对象。

    构造函数如果人为return的不是对象,直接忽略,如果人为return的是对象,就取代this。

    工厂模式生成的实例对象的__proto__直接指向基类object的原型;

    构造函数生成的实例对象的__proto__指向它父类的原型,然后父类的原型上的__proto__指向基类object的原型。

    每个实例和实例之间都是独立的个体,它们之间的的属性互不干扰,是不等的,如果实例和实例之间的属性相等,则这个属性必须是父类的原型上的属性。是因为父类原型上的属性是可继承的,共享的。

原型链:

  在操作obj.属性的时候,首先看这个属性是私有的还是从父类的原型上继承的,如果是私有的直接使用,如果私有的没有就查看父类的原型上有没有,如果有就直接使用,如果没有 就再次向父类的父类的原型上查找,一直查到基类object为止,如果object也没有就得到undefined,这就是原型链。

  

实例的__proto__上的属性

  

instanceof  判断对象是不是这个类的实例对象;

isPrototypeOf() 判断实例对象是否是父类的原型

getPrototypeOf() 获取实例对象的原型;

hasOwnProperty() 判断一个属性是不是自身(私有)的属性

in 判断1一个山西是不是这个对象上的不管是私有的还是公有的

实例对象的原型就是他父类的原型

3.如果不给类的原型指定一个对象,这个实例对象的__proto__上有一个constructor属性;

 如果给这个类的原型指定了一个对象,实例上的__proto__就没有constructor属性了。

构造函数里和原型里的this都指向实例对象

This指向问题:

  (1)this是一个对象,函数外的this都指向window;

  (2)函数内的this,它的指向跟函数调用有关,看函数得前面有没有点,有点就指向点前面的对象,没有就指向window;

  (3)定时器的this永远是window,自执行函数里的this是window

  (4)构造函数里的this和原型上的this都指向实例对象

改变this指向的方法:

  提前将this赋值;

  call;

  apply       call和apply执行是一样的都是将前面函数内的this改成第一个参数,然后执行前面的函数,不同在从第二个函数开始 apply是一个数组;

  bind bind只改变前面函数的this,但是不执行前面的函数,需要加一个()才执行继承。

继承

  (1)call继承 子类继承父类;

     将父类的私有属性继承为子类的私有属性

     

  (2)原型继承 将父类的私有和公有属性都继承为子类的公有属性

     子类的原型=父类的实例 B。prototype=new A()

     

原文地址:https://www.cnblogs.com/yuanjingjing/p/10213179.html

时间: 2024-10-07 11:22:56

面向对象(2 )构造函数 原型 原型链的理解的相关文章

JS中面向对象的,对象理解、构造函数、原型、原型链

6.1 理解对象 6.1.1 对象属性类型 ECMS属性有两种类型:数据属性和访问器属性 1 数据属性 [[configurable]] 表示能否通过Delete 删除属性从而从新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性.对象上定义的属性默认值为true [[enumerable]] 表示能否通过for-in循环返回属性.直接在对象上定义的属性,它们的这个特性默认值为true [[writable]] 表示能否修改属性值.像前面例子中那样直接在对象上定义的属性,它们默认值为t

原型、原型对象、构造函数、原型链理解

1. 基本概念: "原型属性"也可以叫做"原型"(prototype):所有函数都有prototype,我觉得可以理解为python中的类属性,不需要通过实例,直接用类(es5就是函数名)可以调用,下面列举了三种创建函数的方法,函数创建后都有prototype属性,prototype指向"原型对象". // 函数声明 function F1() { }; // 表达式定义 let F2 = function () { }; // 函数构造 let

javascript面向对象系列5——知识点(原型和原型链)

基本概念 [原型链]每个构造函数都有一个对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针.那么,如果原型对象等于另一个原型的实例,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针.如果另一个原型又是另一个原型的实例,那么上述关系依然成立.如此层层递进,就构成了实例与原型的链条. [原型对象]这个对象包含可以由特定类型的所有实例共享的属性和方法.所有引用类型默认都继承了Object,而这个继承也是通过原型链实现

面向对象之构造函数、实例对象、原型

一.面向对象首先有一个需求,点击按钮改变div的样式.按照常规的思维来写,我们可能是先获取到目标元素,然后给目标元素添加事件,在事件中书写div需要改变的样式属性.如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text

前端基本知识(二):JS的原型链的理解

之前一直对于前端的基本知识不是了解很详细,基本功不扎实,但是前端开发中的基本知识才是以后职业发展的根基,虽然自己总是以一种实践是检验真理的唯一标准,写代码实践项目才是唯一,但是经常遇到知道怎么去解决这个问题,但是不知道使用的是什么一种方法,方法的原理是什么,现在觉得大学里学习的基本知识还是很重要的,一定有自己的理解才能走的更远. 无论以后自己的学习新的技术,但是万变不离其宗,基本扎实,学习效率高. 废话这么多,开始了今天理解的四部分部分. 一.JS的原型链理解方式 二.原型理解 三.规则 四.j

Javascript-我对作用链、闭包、原型及原型链的理解

Javascript-基础概念总结(2) 最近学习一些javascript基础知识,也解决了很多之前的疑惑,记得第一次被问及怎样理解闭包时,我的回答是:就是类似于封装吧!现在想想是有多白痴,学习技术是需要逻辑性很强的,技术注重用事实和数据说话,每一点都需要理解透彻,在技术上没有猜测,没有套路,以后自己在回答技术性的问题时,应做到知道就是知道,不理解或不太明白的,就诚实对待,这样有助于自己积累知识,了解自己的不足,从而提升自己.讲了那么多题外话,是为了让自己认识到应真诚的对待学习.下面是一些我的知

JS面向对象(2)——原型链

原型链用于ECMAScript的继承.其思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.说人话,我们知道,一个构造函数Subtype,其原型对象有一个指向构造函数的指针,这是联系构造函数和原型的桥梁,如果我让原型对象的指针指向了另一个原型,而另一个原型原本指向其构造函数的指针也指向了另一个原型,那么,这就是一个原型链了,原型上的属性会一层一层往下传递. function SuperType(){ this.property=true; } SuperType.prototype.ge

JS中原型链的理解

在谈原型链之前,我们首先要了解自定义函数与 Function 之间是什么关系,而构造函数.原型和实例之间又存在什么千丝万缕的关系呢?其实,所有的函数都是 Function 的实例.在构造函数上都有一个原型属性 prototype,该属性也是一个对象:那么在原型对象上有一个 constructor 属性,该属性指向的就是构造函数:而实例对象上有一个 _proto_  属性,该属性也指向原型对象,并且该属性不是标准属性,不可以用在编程中,该属性用于浏览器内部使用. 1 // _proto_ 2 在函

深入javascript面向对象,js的原型链、继承

进阶面向对象----------------------– 在JS源码中,系统对象也是基于原型的程序, 尽量不要去添加和修改系统对象的方法 包装对象----------------------– 基本类型都有自己对应的包装对象 比如String Number Boolean 基本类型会找到对应的包装对象类型,然后包装对象把所有的属性方法给了 基本类型,然后包装对象消失 例如 var str = 'abc'; str.num = 10; //创建一个包装对象,给包装对象加num属性,然后立刻消失.