我对术语var
和this
在JavaScript构造函数中使用关键字声明变量感到有些困惑。例如,在下面的代码中,是var title
与变量不同的变量happySongs[0].title
。它们都用不同的东西初始化。在构造函数中将title初始化为song参数,并且在构造函数之外还将title初始化。但是,它们都返回不同的东西。如果打印出来,happySongs[0].title
它将为您带来新的价值。但是,如果您打印出该concat()
方法,标题将不会具有“测试”的新值,而将具有旧的值....因此,这里发生了两种不同的情况?这些是单独的变量吗?在函数构造函数中使用var
和声明变量时,有什么区别this
吗?
function Tune(song,artist) {
var title = song;
this.concat = function() {
return title + " " + artist;
}
}
var happySongs = [];
happySongs[0] = new Tune("Putting on the Ritz", "Ella Fitzgerald");
happySongs[0].title = 'test'
//prints out test
console.log(happySongs[0].title);
// prints out correct title and artist
console.log(happySongs[0].concat());
他们是不同的。
var title = song;
是构造函数内的局部变量。
happySongs[0].title = 'test'
在构造的对象上创建title
属性Tune
。改变一个不会对另一个产生影响。的concat
功能,被构造函数内声明,有权访问本地范围title
的外部范围声明的变量。如果您this.title
改为引用,则将获得以下属性:
this.concat = function() {
return this.title + " " + artist;
}
如果将以上内容放入原始代码中,则会导致最后一行:
console.log(happySongs[0].concat());
要输出"test Ella Fitzgerald"
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句