我有以下JS代码:
var Item = function ()
{
this.property = '';
this.myfunction = function ()
{
var value = this.property;
};
};
但是,this
并未指向定义类,因此值不会得到任何结果。
如何从我的函数中访问this.property
?
答案 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并不是一回事。