Javascript js中的构造函数

Javascript js中的构造函数,javascript,object,constructor,hasownproperty,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.hasOwnProp

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

    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

hasOwnProperty
不查看原型链,而
中的
操作符查看原型链


另外,
Book
是一个函数,它没有自己的属性,它继承了
apply
call
等方法。使用
new
创建
Book
的实例将创建一个对象,其原型链以
Book开头。prototype
因此它将看到
title
之类的属性
Book2
没有
title
属性,它只在
新的
对象上设置title属性
Book2
确实从其原型继承了
toString
方法


hasOwnProperty
,顾名思义,告诉您这个特定对象本身是否具有给定的属性。它不查看原型。

中的
告诉您对象是否在任何地方都有属性,包括其原型链。

实际上只是更改了主题-我的问题是-当我在Book2 vs b上使用这些属性时-结果为什么不同。呃,相同的答案。。。!?函数没有属性?你能澄清一下吗..我假设这里的Book2将具有属性。不,将继承的是当你调用
a=newbook()
a
将继承
Book.prototype
的属性
Book
不继承自
Book.prototype
为什么Book2必须继承-例如,它已经继承了-所以当我执行'Book2.hasOwnProperty(“title”)'时,为什么这是false?不,对象Book2是一个函数,没有title属性。从
this.title=
开始的行在调用Book2时创建的对象上创建了一个title属性,而不是在Book2本身上。Book2有一个原型属性,它没有title属性“为什么直接在对象上使用检查时为false-但在实例上检查时为true”-实例是对象。函数是对象。原型也是一个对象。但它们不是相同的对象,也不是所有对象都具有相同的属性。