Trying to understand the outputs below - why are the checks false when directly used on objects - but true when checked on instances ?? can some one explain - am I missing something here?
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
does not look at the prototype chain, thein
operator doesAlso,
Book
is a function, it does not have its own properties, it inherits methods likeapply
andcall
. Creating an instance ofBook
withnew
will create an object whose prototype chain starts withBook.prototype
so it will see properties liketitle
.