使用构造函数定义JS对象时,有没有办法避免对每个对象属性使用“this”?这看起来很难看。 E.g。
function Thingy(abc) {
this.var1 = abc;
this.var2 = this.var1 + " hello ";
// etc
}
var myObj = new Thingy();
似乎我应该可以使用“var var2”然后省略“this”并且只是引用“var2”,但我错过了什么?
答案 0 :(得分:2)
您可以使用您喜欢的任何对象,最后只需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
};
}
答案 1 :(得分:2)
好吧,我担心你会遇到语言的设计方式。
但是有一种感觉,你可以使用构造函数中的普通var
语句。在那里创建的任何函数都可以访问包含这些属性的闭包:
function Thingy(abc) {
var var1 = abc;
this.func1 = function(str) {return var1 + ", hello";};
}
var thing1 = new Thingy("Dan");
thing1.func1(); // => "Dan, hello"
请注意,这是如何将完全私有变量封装在对象中的,因此它通常是一种有用的技术。
答案 2 :(得分:1)
不,没有办法避免它。您需要使用this
为对象分配变量。
答案 3 :(得分:-2)
试
function Thingy(abc) {
with(this)
{
var1 = abc;
var2 = this.var1 + " hello ";
// etc
}
}
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/with