从子类访问javascript父类属性

时间:2013-10-23 02:32:50

标签: javascript

大家好我在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? 谁都可以帮忙??

1 个答案:

答案 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";
};