gpt4 book ai didi

javascript - UnCaught TypeError - Javascript 中的嵌套对象?为什么这是不允许的?对象字面量表示法有效

转载 作者:行者123 更新时间:2023-12-02 15:26:36 25 4
gpt4 key购买 nike

进行一些 JS 测试,我尝试在我的 v 命名空间中实例化一些嵌套对象。正如您将在下面看到的,ClassA 和 ClassB 按预期工作。当我尝试将某些对象嵌套在另一个属性 (myCustomProperty) 下时,我开始遇到问题!有人可以解释一下吗?

原代码如下:

var v = (v) ? v : {};

v.someClassA = (function() {
this.hello = function() {
console.log("Class A Hello!");
}
});

v.someClassB = (function() {
this.hello = function() {
console.log("Class B Hello!");
}
});

// this all works!
var myClassA = new v.someClassA();
var myClassB = new v.someClassB();


v.myCustomProperty = (function() {

function someClassC() {
this.hello = function() {
console.log('C');
}
}

function someClassD() {
this.hello = function() {
console.log('D');
}
}

return {
someClassC: someClassC,
someClassD: someClassD
}
});

// Uncaught TypeError: v.myCustomProperty.someClassC is not a function! Why?
var myClassC = new v.myCustomProperty.someClassC();
var myClassD = new v.myCustomProperty.someClassD();

myClassA.hello();
myClassB.hello();
myClassC.hello();
myClassD.hello();

如果我将 v.myCustomProperty 的声明更改为使用对象文字表示法,那么一切都有效! :

v.myCustomProperty = {
someClassC: function() {
this.hello = function() {
console.log('C');
}
},
someClassD: function() {
this.hello = function() {
console.log('D');
}
}
}

我想我的问题实际上是如何使用原始代码片段中的符号来完成这项工作?可能的?这样做的做法很糟糕吗?

谢谢!

最佳答案

v.myCustomProperty 是一个返回对象的函数。您必须先调用该函数:

new (v.myCustomProperty().someClassC)();
// ^^

否则,v.myCustomProperty.someClassC()会尝试访问函数的属性someClassC,而我们都知道(希望)函数没有这样的属性属性。

<小时/>

或者您可能打算立即执行该函数并将对象分配给 myCustomProperty

v.myCustomProperty = (function() {
// ...
}()); // <- call function

关于javascript - UnCaught TypeError - Javascript 中的嵌套对象?为什么这是不允许的?对象字面量表示法有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656218/

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