gpt4 book ai didi

javascript - 如何创建一个具有许多其他对象功能别名的对象

转载 作者:行者123 更新时间:2023-11-30 17:32:11 25 4
gpt4 key购买 nike

我这里有个情况。让我们举个例子:

function ScrewDriver(){
var data = ...;
this.driving = function(){
//Some Stuff Here
}
}

function Hammer(){
var data = ...;
this.stomp = function(){
//Some Stuff Here
}
}

function MultiTools(){
this.screwDriver = new ScrewDriver();
this.hammer = new Hammer();
}

这是我们示例的基础。现在我想从 multiTools 中动态重定向工具功能。让我们解释一下:

function Work(){
this.tools = new MultiTools();
this.tools.screw(); // I want to user directly the function of the proper object
this.tools.hammer.stomp(); // Not like this;
}

我在想类似的事情:

function MultiTools(){
this.screwDriver = new ScrewDriver();
this.hammer = new Hammer();
for(var prop in this.screwDriver){
this[prop] = this.screwDriver[prop];
}
//Same for each object
}

但它并没有像我想要的那样工作,因为如果我在子对象函数中访问子对象数据,我会得到一个错误。当我调用 this.tools.screw();我实际上想要 this.tools.screwDriver.screw();最后我只想要一个重定向。

有人知道怎么做吗?

提前致谢。

最佳答案

你可以使用.bind():

   this[prop] = this.screwDriver[prop].bind(this.screwDriver);

这确保在调用函数时,它们将具有正确的 this 值。

您可以为您的 MultiTools 对象编写一个通用函数:

function MultiTools() {
var multitool = this;
function promoteMethods(subobj) {
for (var prop in subobj)
if (typeof subobj[prop] == 'function')
multitool[prop] = subobj[prop].bind(subobj);
else
multitool[prop] = subobj[prop];
}

promoteMethods(this.hammer = new Hammer());
promoteMethods(this.screwDriver = new ScrewDriver());
// ...
}

关于javascript - 如何创建一个具有许多其他对象功能别名的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789381/

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