方法的javascript属性

时间:2011-12-24 14:55:01

标签: javascript oop

是否可以在javascript中设置方法内的属性?

例如

function Main() {

   this.method = function() {
      this.parameter = 'something_relevant'
   }
}

var p = new Main()
p.method()
console.log(p.method.parameter)

我试过这个并且记录'undefined'。是关于范围吗?

2 个答案:

答案 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';

此外,请勿在表达式后删除分号。