我知道您可以使用子对象和函数创建文字对象:
var obj = {
val : 1,
level1 : {
val : 2,
val2 : 3,
func : function(){
return this.val2
}
}
}
console.log(obj.val);
console.log(obj.level1.val);
console.log(obj.level1.func());
输出:
1
2
3
我想做的是对对象中的方法做同样的事情,类似于:
function objType() {
this.val = 1;
this.func = function(){
return this.val;
}
this.level1 = function(){
this.val = 2;
this.func = function(){
return this.val;
}
this.level2 = function(){
this.val = 3;
this.func = function(){
return this.val;
}
}
};
};
然后我会期待:
var obj = new objType();
console.log(obj.func());
console.log(obj.level1.func());
console.log(obj.level1.level.func());
输出:
1
2
3
但是,在脚本抛出错误之前,只有第一个console.log输出。
有没有办法在Javascript中使用子方法?
- 编辑 -
我的目标是创建一个类,我可以用来在屏幕中间显示一个框,用于显示消息,问题(获得是/否响应)和表单。我正在考虑使用子方法构建它的好方法,以便随后可以引用它:
function box() {
this.show = function(){
//multiple sub methods here
}
this.hide = function(){
//code to hide window here
}
}
var aBox = new box();
aBox.show.message('the message');
aBox.hide();
aBox.show.question('the question');
aBox.hide();
- edit-- 谢谢@Sean Vieira
为了完整性,我将使用他的解决方案将我的代码的修改版本放在这里:
function objType() {
this.val = 1;
this.func = function(){
return this.val;
}
this.level1 = {
val : 2,
func : function(){
return this.val;
},
level2 : {
val : 3,
func : function(){
return this.val;
}
}
}
var obj = new objType();
console.log(obj.func());
console.log(obj.level1.func());
console.log(obj.level1.level.func());
输出
1
2
3
答案 0 :(得分:3)
您可以使用链接轻松完成此操作
function Box() {
this.show = function(){
//your code goes here
return this;
},
this.message = function(message){
//code goes here
return this;
}
}
var aBox = new Box();
aBox.message('the message').show()
答案 1 :(得分:2)
您的问题是JavaScript中的this
引用了包含范围 - 在使用new
运算符调用的函数的情况下,它是一个新的Object
,这适用于所有内容该函数的范围(除非您以某种方式创建新范围。)
因此,在您的代码中,我们可以用虚构的“新”对象替换它......让我们称之为that
。
function objType() {
var that = {}; // This is what `new` does behind the scenes
// (Along with a few other things we won't replicate here).
that.val = 1;
that.func = function(){
return that.val;
}
// Do additional things with `that` here
return that;
}
但是,每当你处理一个函数,你不调用“类”时(如在一个独立的函数或对象的“方法”中),{{1} }在运行时动态设置。
这意味着:
this
答案 2 :(得分:1)
这可能适用于level1:
var obj2 = new obj.level1();
console.log(obj2.func());