大家好我在javascript中有关于obj的问题 如何访问父类属性
function randomObj() // for example button obj
{
this.text = "this is obj";
}
function parentClass()
{
this.name = "parent";
this.subObj;
}
parentClass.prototype.generate = function()
{
this.subObj = new randomObj();
this.subObj.changeParentClassName = function() // button obj wants to change name
{
this.name = "not parent";
}
}
var sampleObj = new parentClass();
sampleObj.generate();
sampleObj.subObj.changeParentClassName (); // does not works
似乎'changeParentClassName'中的'this'是subObj,如何访问parentclass.name? 谁都可以帮忙??
答案 0 :(得分:5)
JavaScript this
在调用函数时将成为.
左侧的对象。在这种情况下,subObj不是parentObj,因此您在subObj上设置name
。您有2个选项,可以将this
放在generate
内的不同变量中,这样就不会被JavaScript的this
逻辑取代。类似的东西:
var parentObj = this;
this.subObj.changeParentClassName = function() // button obj wants to change name
{
parentObj.name = "not parent";
};
或者您可以使用bind()创建一个新函数,该函数将this
绑定到已知对象(在本例中为您的父对象),例如:
this.subObj.changeParentClassName = (function() // button obj wants to change name
{
this.name = "not parent";
}).bind(this); // bind the 'this' inside the changeParentClassName to the 'this' inside generate
查看Function bind()以获取有关绑定和交互式示例的更多信息。
注意,如果您要定位最新版本的Javascript(ECMAScript 6或更高版本),则可以使用=>
函数,该函数与声明范围相比不会更改this
的值。所以你可以使用:
this.subObj.changeParentClassName = () => // button obj wants to change name
{
this.name = "not parent";
};