以下两个代码块的工作区别是什么?两者似乎工作方式相似(我知道第一个是正确的,第二个不是,但差别是什么?)。
function Album(title, artist) {
this.title = title;
this.artist = artist;
this.play = function() {
console.log("Playing " + this.title + " - " + this.artist);
};
}
var darkside = new Album("Dark Side of the Cheese", "Pink Mouse");
darkside.play();
使用相同的代码,但使用return this
构造函数并创建没有new
运算符的对象实例
function Album(title, artist) {
this.title = title;
this.artist = artist;
this.play = function() {
console.log("Playing " + this.title + " - " + this.artist);
};
return this;
}
var darkside = Album("Dark Side of the Cheese", "Pink Mouse");
darkside.play();
两者都返回相同的结果:
Playing Dark Side of the Cheese - Pink Mouse
答案 0 :(得分:2)
这"工作"因为this
没有new
在浏览器上下文中解析为window
,因此将title
对象的window
属性设置为title
参数。
您应该使用new
,以便在正确的上下文中构建它,并正确创建一个具有自己属性的新对象。
function Album() { alert(this==window); }; x = Album(); // true
function Album() { alert(this==window); }; x = new Album(); // false
因此,如果您创建了另一个实例,this.title
将覆盖之前的等等,并且您将不会有任何独立对象来存储title
。