Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要了解javascript中原型的行为_Javascript - Fatal编程技术网

需要了解javascript中原型的行为

需要了解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 !!!'); }

此代码从原型生成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(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函数,第一个函数不再存在,谢谢您的解释。