2017-12-25
2017-12-25 本文已影响0人
AoeKeller
安全模式
-
看下面代码,输出是什么
var Book = function (name, price, time) { this.name = name; this.price = price; this.time = time; } var book = Book('JavaScript设计模式', '¥99.00', '2017-12-25');
-
以上的代码执行后,问,book这个变量是什么?
你一定以为是一个类的实例吧,但是真正在浏览器打印一下会发现,console.log(book) // undefined
但是你要是直接执行
console.log(window.name) //JavaScript设计模式
console.log(window.price) //¥99.00
console.log(window.time) //2017-12-25
-
仔细看,发现少了一个new关键字。我们知道new的作用是把对当前对象的this不断的赋值。如果没有new的话,浏览器就会默认执行当前函数,所以在window的对象中有了以上三个变量。为了保证安全,我们需要找一位‘检察长’
var Book = function (name, price, time) { if (this instanceof Book){ this.name = name; this.price = price; this.time = time; } else { return new Book(name, price, time); } } var book = Book('JavaScript设计模式', '¥99.00', '2017-12-25');
然在去打印试试看吧。