构造函数在js中的函数

时间:2016-02-08 13:14:56

标签: javascript object constructor hasownproperty

尝试理解下面的输出 - 为什么直接在对象上使用时检查错误 - 但在实例上检查时是真的?可以解释一下 - 我在这里错过了什么吗?

    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

2 个答案:

答案 0 :(得分:1)

Book2没有title属性,它只在new对象上设置title属性。 Book2 从其原型中继承 toString方法。

hasOwnProperty,顾名思义,告诉您这个特定对象本身是否具有给定属性。 查看原型 in告诉您对象是否具有任何位置属性,包括其原型链。

答案 1 :(得分:0)

hasOwnProperty不查看原型链,in运算符

此外,Book是一个函数,它没有自己的属性,它继承了applycall等方法。使用Book创建new的实例将创建一个对象,其原型链以Book.prototype开头,因此它会看到title等属性。