javascrip中的继承

“实例对象一旦创建,将自动引用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

https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf?redirectlocale=en-
US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2FisPrototypeOf