需要了解javascript中原型的行为
此代码从原型生成ISBN编号(即55555)的默认值。如预期需要了解javascript中原型的行为,javascript,Javascript,此代码从原型生成ISBN编号(即55555)的默认值。如预期 function Book() { alert('construct called !!!'); } Book.prototype={ ISBN:55555 }; var book=new Book(); alert(book.ISBN); 但是下面的代码会导致警报消息带有“undefined”测试 function Book() { alert('construct called !!!'); }
function Book()
{
alert('construct called !!!');
}
Book.prototype={
ISBN:55555
};
var book=new Book();
alert(book.ISBN);
但是下面的代码会导致警报消息带有“undefined”测试
function Book()
{
alert('construct called !!!');
}
function Book(isbn)
{
this.ISBN=isbn;
}
Book.prototype={
ISBN:55555
};
var book=new Book();
alert(book.ISBN);
这也会导致默认值(即55555)需要理解为什么会出现这种行为。当您的构造函数
Book
执行时,它找到的第一个参数未定义,并将其分配给This.ISBN
因此,也许令人困惑的是,book.ISBN包含了,而不是完全没有定义
当调用book.ISBN时,因为这个原语是在book实例本身中找到的,所以解释器从不遍历原型链
如果要编写代码回退到prototype中的值,则必须显式检查未定义的:
function Book(isbn)
{
if (isbn !== undefined) this.ISBN=isbn;
}
这是因为调用构造函数时没有传递值,所以
isbn
是undefined
。当您使用未定义的值重置属性时,为什么希望它是5555555
?为什么默认情况下它会有55555
?调用构造函数时,已将ISBN
属性显式设置为ISBN
,这是未定义的(this.ISBN=ISBN;
),在JavaScript中不能重载函数。您定义Book函数,然后立即用另一个版本覆盖它。请注意,当您在没有任何参数的情况下调用new Book()时,将调用第二个Book函数,第一个函数不再存在,谢谢您的解释。