是否可以在javascript中设置方法内的属性?
例如
function Main() {
this.method = function() {
this.parameter = 'something_relevant'
}
}
var p = new Main()
p.method()
console.log(p.method.parameter)
我试过这个并且记录'undefined'。是关于范围吗?
答案 0 :(得分:3)
在method()
内部,您要设置调用该方法的对象的属性,而不是在表示该方法的函数对象上。
这显示了方法内部的差异:
this.method = function() {
this.parameter = 'abc'; // Set parameter on the object on which method() is called
this.method.parameter = 'xyz'; // Set parameter on the object representing the method itself
};
这显示了在调用方法后访问属性的区别
p.method();
console.log(p.parameter); // Display property of the object p, equals 'abc'
console.log(p.method.parameter); // Display property of the function object representing method(), equals 'xyz'
您应该决定是否需要函数对象或p
对象上的属性。请注意,函数对象可能由Main()
构造函数创建的许多对象共享。因此,它的行为方式有点类似于C ++或Java等语言中的静态成员。
如果您打算使用对象上定义的属性,您的代码应该类似于:
function Main() {
this.method = function() {
this.parameter = 'something_relevant'; // Set property on object on which method() is called.
};
}
var p = new Main();
p.method();
console.log(p.parameter); // Read property from object p.
如果您打算使用在代表method()
的函数对象上定义的属性,您的代码应该类似于:
function Main() {
this.method = function() {
this.method.parameter = 'something_relevant'; // Set property on function object representing method().
};
}
var p = new Main();
p.method();
console.log(p.method.parameter); // Read property from the function object.
答案 1 :(得分:2)
函数基本上都是对象,所以只需设置就好了:
this.method = function() {
};
this.method.parameter = 'something_relevant';
此外,请勿在表达式后删除分号。