【发布时间】:2015-11-11 17:25:07
【问题描述】:
玩一些 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');
}
}
}
我想我的问题实际上是如何使用我原来的 sn-p 中的符号来完成这项工作?可能的?这样做的可怕做法?
谢谢!
【问题讨论】:
标签: javascript class object constructor object-literal