原型简介
写的灰常好的参考资料
这个参考资料也不错
这个可以当练习材料
原型是一个对象,其他的对象可以通过原型(_proto_)实现属性继承
prototype是函数的原型(这个是例外),但是函数也有__proto__这个属性
js中,除了null以外,其余的对象都有原型。
查看原型:
var a = [1, 2, 3];
console.dir(a);
打开浏览器,按下F12,可以看到下图
这里有一个结论:大多数情况下,某个对象的原型(__proto__)可以理解为构造器constructor(注意:构造器constructor是一个函数)的原型(prototype)。即a.__proto__ == a.constructor.prototype。也就是说__proto__下的方法和属性在constructor.prototype下基本都可以找到。
原型指向
1.字面量的创建方式
字面量的创建方式:指向constructor的原型prototype
var a = {}
console.log(a.__proto__ === a.constructor.prototype) //true
2.构造函数的创建方式
构造函数的创建方式:指向创建函数的原型prototype
function test(){
}
var a = new test()
console.log(a.__proto__ === a.constructor.prototype) //true
console.log(a.__proto__ === test.prototype) //true
3.create的创建方式
create的创建方式:指向创建时的对象本身。
var c = {}
var d = Object.create(c)
console.log(d.__proto__ === d.constructor.prototype) // false,这是__proto__ === constructor.prototype的唯一例外,其他的都是适用的。
console.log(d.__proto__ == c) // true
原型链
由于每个对象都有__proto__属性,于是存在着一条原型链。