如何在JavaScript中获取内部方法中定义的“类”的引用?

时间:2011-08-06 22:48:21

标签: javascript

我有以下JS代码:

var Item = function ()
{
    this.property = '';
    this.myfunction = function ()
    {
        var value = this.property;
    };

};

但是,this并未指向定义类,因此值不会得到任何结果。

如何从我的函数中访问this.property

4 个答案:

答案 0 :(得分:3)

您需要创建一个闭包,用于捕获父作用域this

的值
var Item = function ()
{
    this.property = '';
    var self = this;
    this.myfunction = function ()
    {
        var value = self.property;
    };

};

更新:正如其他人所指出的,当Item用作构造函数(new Item())时,不需要此闭包。注意这里以供将来参考。

答案 1 :(得分:2)

只需为this创建别名即可。它会被关闭。

var Item = function ()
{
    this.property = '';
    var self = this;
    this.myfunction = function ()
    {
        var value = self.property;
    };

};

答案 2 :(得分:1)

如果您将Item()称为构造函数,则代码将按原样运行。

var item = new Item();
item.property = "the property";
item.myfunction(); // value = "the property"

答案 3 :(得分:0)

this根据具体情况而变化。上下文是如何调用函数,而不是如何定义函数,而是如何调用函数。

除此之外,你似乎在这里混合了两种模式。我确定你的意思是:

var Item = function() {
  this.property = '';
};

Item.prototype.myfunction = function() {
  var value = this.property;
};

相反,你有点混合了原型的封闭模式,这在那里看起来并不是很有用。关闭对于隐藏成员是有利的,允许真正的私人成员,但无论如何你在这里暴露了财产。没有理由不在原型上坚持这个功能。

帮自己一个忙,忽略你对更传统OO的任何概念,他们对你没有任何好处。 Prototypal并不是一回事。