gpt4 book ai didi

javascript - 如何从子类访问父类属性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:48 25 4
gpt4 key购买 nike

我有一个关于 Javascript 对象的问题。如何访问父类的属性?

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?

最佳答案

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 绑定(bind)到一个已知对象(在本例中为您的父对象),例如:

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()有关绑定(bind)和交互式示例的更多信息。

请注意,如果您的目标是最新版本的 Javascript(ECMAScript 6 或更高版本),您可以使用 => 函数,它不会更改 this 的值与声明范围相比。所以你可以使用:

this.subObj.changeParentClassName = () => // button obj wants to change name
{
this.name = "not parent";
};

关于javascript - 如何从子类访问父类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com