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”-实例是对象。函数是对象。原型也是一个对象。但它们不是相同的对象,也不是所有对象都具有相同的属性。