想了解原型和原型链,我觉得首先我们得知道javascript里有一个object 与 function,它俩都是构造函数,当然函数也是一个对象。我们打印object 与 function看一下,
console.log(function)
console.log(object)
那么这个object 与 function 之间有何关系与区别呢?首先您只需要记住:
1. 所有普通对象都是 object 的实例(也就是说object是所有普通对象的爸爸);
2. 所有普通函数都是 function 的实例(也就是说function是所有普通函数的爸爸);
3. function是 object 的实例;(object是所有对象的爸爸)
构造函数与原型对象的区别:
object是构造函数,而object.prototype是构造函数的原型对象。构造函数自身的属性和方法无法被共享,而原型对象的属性和方法可以被所有实例对象所共享。
其次,constructor属性是原型对象上的一个属性,可以被所有实例对象所共享。要注意的是,prototype是构造函数的属性,而constructor则是构造函数的prototype属性所指向的那个对象,也就是原型对象的属性。由于constructor属性是一种原型对象和构造函数的关系,所以在修改原型对象的时候,一定要注意constructor的指向问题。
接下来我们说重点,javascript里的__proto__ 和 prototype 属性。
1. 所有的对象都有__proto__ 属性,可通过__proto__属性来访问这个对象的原型,而 __proto__ 指向的是它原型对象的prototype 属性(对象没有prototype属性);
2. 所有的构造函数都有一个prototype 和 __proto__ 属性,而该函数的prototype属性指向的是它原型对象上的constructor属性。
代码实例:
var a = function () {} // 申明一个函数对象a;
var b = new a(); // 为a创建一个实例b;
console.log("a.prototype:", a.prototype);
console.log("b.__proto__:", b.__proto__);
console.log(a.prototype === b.__proto__);
prototype 的作用:
可以为原型的实例设置公用的属性或方法;
var a = function () {
this.ary1 = [];
}
var b = new a();
var c = new a();
b.ary1.push(1);
c.ary1.push(2);
console.log(b.ary1)
console.log(c.ary1)
a.prototype.ary2 = [];
b.ary2.push(1);
c.ary2.push(2);
console.log(b.ary2);
最后总结下什么是原型链:
所有的对象都有一个__proto__属性,我们通过对象的__proto__属性一层层的向上访问,最终会得到值null;那么我们访问的整个路径就是这个对象的原型链。
(感觉个人理解还是不够深刻,这里只是记录一下自己目前对于原型链的理解,多多指教!)
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
-
-
-
-
-
js编写简易的计算器
本文实例为大家分享了js编写简易计算器的具体代码,供大家参考,具体内容如下使用绑定时间触发 加减乘除加:减:乘:除:源代码:<body> 第一个数...
[阅读全文]
-
-
-
网友评论