-2

试图理解下面的输出 - 为什么直接在对象上使用时检查为假 - 但在实例上检查时为真?有人可以解释一下 - 我在这里遗漏了什么吗?

    function Book2(){
    this.title =  "High Performance JavaScript";
    this.publisher = "Yahoo! Press";
};

Book2.prototype.author = "hgghghg";

var b = new Book2();

alert(Book2.hasOwnProperty("title"));  //false
alert(Book2.hasOwnProperty("toString"));  //false
alert("title" in Book2); //false
alert("toString" in Book2); //true


alert(b.hasOwnProperty("title"));  //true
alert(b.hasOwnProperty("toString"));  //false
alert("title" in b); //true 
alert("toString" in b); //true
4

2 回答 2

1

Book2没有title属性,它只在new对象上设置标题属性。Book2确实从其原型继承了该方法。toString

hasOwnProperty,顾名思义,告诉您这个特定对象本身是否具有给定的属性。它不原型。
in告诉你对象是否在任何地方都有属性,包括它的原型链。

于 2016-02-08T13:18:18.743 回答
0

hasOwnProperty不看原型链,in运营商看

另外,Book是一个函数,它没有自己的属性,它继承了 和 之类的apply方法callBook创建with的实例new将创建一个其原型链以开头的对象,Book.prototype因此它将看到类似title.

于 2016-02-08T13:16:36.450 回答