尝试理解下面的输出 - 为什么直接在对象上使用时检查错误 - 但在实例上检查时是真的?可以解释一下 - 我在这里错过了什么吗?
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
答案 0 :(得分:1)
Book2
没有title
属性,它只在new
对象上设置title属性。 Book2
从其原型中继承 toString
方法。
hasOwnProperty
,顾名思义,告诉您这个特定对象本身是否具有给定属性。 不 查看原型
in
告诉您对象是否具有任何位置属性,包括其原型链。
答案 1 :(得分:0)
hasOwnProperty
不查看原型链,in
运算符
此外,Book
是一个函数,它没有自己的属性,它继承了apply
和call
等方法。使用Book
创建new
的实例将创建一个对象,其原型链以Book.prototype
开头,因此它会看到title
等属性。