在使用构造函数定义 JS 对象时,有没有办法避免对每个对象属性都使用“this”?看起来非常难看。例如
function Thingy(abc) {
this.var1 = abc;
this.var2 = this.var1 + " hello ";
// etc
}
var myObj = new Thingy();
看来我应该能够使用“var var2”然后省略“this”而只引用“var2”,但我错过了什么吗?
在使用构造函数定义 JS 对象时,有没有办法避免对每个对象属性都使用“this”?看起来非常难看。例如
function Thingy(abc) {
this.var1 = abc;
this.var2 = this.var1 + " hello ";
// etc
}
var myObj = new Thingy();
看来我应该能够使用“var var2”然后省略“this”而只引用“var2”,但我错过了什么吗?
您可以使用任何您喜欢的对象,并return
在最后简单地使用它,例如:
function Thingy(abc) {
var thingy = {};
thingy.var1 = abc;
thingy.var2 = thingy.var1 + " hello ";
return thingy;
}
或者
function Thingy(abc) {
var thingy = {
var1: abc,
var2: abc + " hello "
};
return thingy;
}
或者
function Thingy(abc) {
return {
var1: abc,
var2: abc + " hello "
};
}
或者
function Thingy(abc) {
var var1 = abc,
var2 = var1;
var2 += " hello ";
return {
var1: var1,
var2: var2
};
}
好吧,恐怕您会遇到这种语言的设计方式。
但是在某种意义上,您可以使用var
构造函数中的普通语句。在那里创建的任何函数都可以访问包含这些属性的闭包:
function Thingy(abc) {
var var1 = abc;
this.func1 = function(str) {return var1 + ", hello";};
}
var thing1 = new Thingy("Dan");
thing1.func1(); // => "Dan, hello"
请注意,这是将完全私有变量封装在对象中的方法,因此它通常是一种有用的技术。
不,没有办法避免它。您需要使用this
将变量分配给对象。
尝试
function Thingy(abc) {
with(this)
{
var1 = abc;
var2 = this.var1 + " hello ";
// etc
}
}
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/with