(1)创建一个函数以后,解析器都会默认在函数中添加一个数prototype,prototype属性指向的是一个对象,这个对象我们称为原型对象
(2)当函数作为构造函数使用,它所创建的对象中都会有一个隐含的属性执行该原型对象,这个隐含的属性可以通过对象.__proro__来访问
(3)原型对象相当于一个公共区域,凡是通过同一个构造函数创建的对象通常都可以访问到相同的原型对象,我们可将对象中共有的属性和方法统一添加到原型对象中,这样我们只需添加一次,就可以是所有的对象都使用
(4)访问对象的一个属性或调用一个方法时,先在自身寻找,如果没有,在去原型对象中寻找,如果还没找到,去原型的原型中寻找。直到找到Object的原型为止,如果没找到,返回undefined
(5)hasOwnProperty() 检查对象自身有没有某属性
6、`原型链、prototype、__proto__之间的区别
在对象创建时,就会有一些预定义的属性,其中定义函数的时候,这个预定义属性就是prototype,这个prototype是一个普通的对象。
而定义普通的对象的时候,就会生成一个__proto__,这个__proto__指向的是这个对象的构造函数的prototype.`
function B(b){
this.b = b;
}
var b = new B('lc');
我们声明一个函数B时就自动创建了prototype对象。而b是构造函数的B的实例,这是候b是一个对象,而我们知道,对象只有__proto__属性。而这个属性是指向他的构造函数(B)的prototype属性。
b中只有__proto__属性,而这个属性是指向他的构造函数的prototype对象的,也就是说
(b.__proto__==B.prototype)
返回true
实例化对象b也可以toString,
而实例化对象b本身并没有toString的方法,那他就会沿着它的__proto__向他的构造函数B的prototype对象去找,而这里也没有,那他就会 继续沿着B.prototype.__proto__向上找。而B.prototype.__proto__指向的就是Object.prototype。
一层一层的链接 关系就是原型链。