如何设置对象函数等于另一个

Vix*_*xed 5 javascript typescript ecmascript-6

假设我有以下对象:

let obj={
    childone: (value) => {
        return value+1;
    },
    childtwo: (value) => {
        return value+3;
    },
    childsingle: (value) => {
        return value+1;
    }
};
Run Code Online (Sandbox Code Playgroud)

是否有任何方法在同一声明中设置obj.childsingle相等obj.childone

我正试图childsingle=childone在对象声明中实现.

我也尝试get按照重复的建议答案使用.

但是,在使用之后:

let obj = {
    childone: (value) => {
        return value+1;
    },
    childtwo: (value) => {
        return value+3;
    },
    get childsingle() {
        return this.childone;
    }
};
Run Code Online (Sandbox Code Playgroud)

我得到handleError TypeError: childsingle is not a function.

yun*_*zen 2

你可能会想到这样的事情:

let obj={
    childone: (value) => {
        return value+1;
    },
    childtwo: (value) => {
        return value+3;
    },
    childsingle: obj.childone
    }
};
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。你必须分两步完成。

赋值运算符 ( ) 的工作方式=如下。它使用运算符的右侧,计算其值并将该值(在您的情况下是对对象的引用)分配给左侧的变量。

因此,在汇编赋值运算符的右侧时,该obj变量不存在。所以你会得到一个错误。

这也行不通

let obj={
    childone: (value) => {
        return value+1;
    },
    childtwo: (value) => {
        return value+3;
    },
    childsingle: this.childone
    }
};
Run Code Online (Sandbox Code Playgroud)

因为this不会引用当前对象。

这不起作用,因为childone没有定义

let obj={
    childone: (value) => {
        return value+1;
    },
    childtwo: (value) => {
        return value+3;
    },
    childsingle: childone
    }
};
Run Code Online (Sandbox Code Playgroud)

这是要走的路:

let obj={
    childone: (value) => {
        return value+1;
    },
    childtwo: (value) => {
        return value+3;
    },
};
obj.childsingle = obj.childone;
Run Code Online (Sandbox Code Playgroud)

但请注意,如果您计划更改该childone功能并认为该childsingle功能也会更改,则事实并非如此。

在更改之前childone,我们有对象的两个键(childone 和 childsingle),它们是对同一函数的引用。但 childone 和 childsing 没有其他关系。如果您更改 chilone 这将是对新函数的引用,并且 childsingle 将保持相同的旧函数