javascript - 以更短的方式调用 JSON 对象内部类的成员函数

标签 javascript json function class object

我的代码如下,

class myClass
{
    constructor()
    {
        this.memberVar1="";
        this.memberVar2="";
    }

    memberFunction1()
    {
        // memberFunction1 code
    }
}

var myObj = {
    objVar1 : someJsonObject,
    objVar2 : new myClass()
}

不像调用memberFunction和memberVar1、memberVar2

myObj.objVar2.memberVar1;
myObj.objVar2.memberFunction1();

我想这样称呼他们

myObj.memberVar1;
myObj.memberFunction1();

有什么方法可以重组 myObj 来实现此目的吗?

提前致谢

最佳答案

函数是 Javascript 中的第一类对象,Javascript 类的成员只是一个对象,因此没有什么可以阻止您将 myObj.memberFunction1 的引用设置为您喜欢的任何内容,包括 someJsonObject.memberFunction1,但是您需要注意 this 的行为将根据您设置引用的方式而有所不同。这对于使您的 memberFunction 根据上下文正确运行可能很重要。

class myClass
{
    constructor()
    {
        this.memberVar1="";
        this.memberVar2="";
    }

    memberFunction1()
    {
        // memberFunction1 code
    }
}

let someJsonObject = {
    memberFunction1: function(source) {
        if (this === myObj) { console.log(`${source}: "this" is myObj`) }
        else if (this === someJsonObject) { console.log(`${source}: "this" is someJsonObject`) }
        else { console.log('JavaScript interpreter is insane') }
    }
}

var myObj = {
    objVar1 : someJsonObject,
    objVar2 : new myClass(),
    memberFunction1: someJsonObject.memberFunction1 // the assignment will cause "this" to point to myObj

}


console.log('==== setting the reference (changes this) ====')
myObj.memberFunction1('myObj')
someJsonObject.memberFunction1('someJsonObject')
myObj.objVar1.memberFunction1('myObj.objVar1') // myObj.objVar1 is === someJsonObject
myObj.keepThis = myObj.memberFunction1 // You can hang onto the "myObj" referenced version of the function if you want
console.log('==== binding to someJsonObject ====')
myObj.memberFunction1 = myObj.memberFunction1.bind(someJsonObject) // using bind will make "this" point to whatever you like (i.e someJsonObject)
myObj.memberFunction1('myObj')
someJsonObject.memberFunction1('someJsonObject')
myObj.objVar1.memberFunction1('myObj.objVar1')
myObj.keepThis('myObj.keepThis')

关于javascript - 以更短的方式调用 JSON 对象内部类的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73604701/

相关文章:

javascript - 检测 Youtube 搜索事件

javascript - 检查对象是否在运行时使用 TypeScript 实现接口(interface)

javascript - jPlayer 和 IE10 - SCRIPT438 : Object doesn't support property or method 'jPlayer'

javascript - 在函数中拒绝不返回错误

ios - 提要不一致时解码 JSON - Swift

c - C 调试功能中的 Visual Studio Code Hello World 不起作用 Programm NullReferenceException :

postgresql - PL/pgSQL 函数中的 SELECT 或 PERFORM

javascript - 这个递归函数有什么问题?

python - 检查多个模拟的调用顺序

javascript - 使用 Node js 进行 Angular http 路由