“实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分成两种,一种是本地的,另一种是引用的。”
从java的角度来说,
实例对象的本地属性和方法就是private方法或者变量,只对当前的实例对象可见;
实例对象从prototype对象继承的属性和方法就是public方法或者变量,不仅对当前的实例对象可见,而且对它的子类可见;
这被称为 Prototype继承模型
。
可以通过 isPrototypeOf() 方法来检查某个对象是否在实例的prototype chain中;
可以通过 hasOwnProperty() 方法来区分本地属性和从prototype继承来的属性;
但是我在实验 isPrototypeOf() 方法时,发现一个问题:
例如下面的例子:
function Person(name,color){
this.name=name;
this.color=color;
}
var p = new Person(“a”, “b”);
console.log(Person.prototype.isPrototypeOf(p))
// true
console.log(Function.prototype.isPrototypeOf(p))
// false
console.log(Object.prototype.isPrototypeOf(p))
// true
从web developr debugger上的截图上,可以看出,Function类时在p实例的prototype
chain上,但是为什么返回false呢。
http://blog.vjeux.com/2011/javascript/how-prototypal-inheritance-really-
works.html
http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html