我的代码如下,
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/