javascript中的子对象函数

时间:2011-06-03 20:41:03

标签: javascript

我知道您可以使用子对象和函数创建文字对象:

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

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());