javascrip中的继承

来源:互联网 发布:怎么算包皮正常知乎 编辑:程序博客网 时间:2024/06/06 11:03

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