Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多维对象_Javascript - Fatal编程技术网

Javascript 多维对象

Javascript 多维对象,javascript,Javascript,如何制作多维对象 function tst(){ this.a = function(){ alert(this.b.abc.c()); }; this.b = function(){ }; } var obj = new tst(); obj.b.abc = function(){ this.c = function(){ return 'hello world'; }; }; obj.a(); 在这里似乎

如何制作多维对象

function tst(){
    this.a = function(){
        alert(this.b.abc.c());
    };

    this.b = function(){

    };
}
var obj = new tst();
obj.b.abc = function(){
    this.c = function(){
        return 'hello world';
    };
};

obj.a();

在这里似乎工作得很好:


此代码存在问题:

obj.b.abc = function(){
    this.c = function(){
        return 'hello world';
    };
};
调用
abc
函数不会创建
obj.b.abc.c
函数,而是创建
obj.b.c
函数。因此,
this.b.abc.c()
抛出一个错误,因为这样的函数不存在


这将使它发挥作用:

function tst() {
    this.a = function() {
        alert( this.b.abc.c() );
    };

    this.b = function() {

    };
}

var obj = new tst();

obj.b.abc = function() {
    this.abc.c = function() { // <--- NEW 
        return 'hello world';
    };
};

obj.b.abc(); // <--- NEW
obj.a();
函数tst(){
this.a=函数(){
警报(this.b.abc.c());
};
this.b=函数(){
};
}
var obj=新的tst();
obj.b.abc=函数(){

这个.abc.c=function(){//…取决于您如何调用
abc
函数…编辑了我的问题..如果您想从自身调用它呢?@sime那么您如何调用它呢?顺便说一句,第二行有一个输入错误:
function
和警报()未使用
正确关闭)
如何避免在obj.b.abc方法中写入this.abc而不是this?@clarkk您可以使用
参数。被调用方
引用
abc
参数。被调用方.c=函数(){…
。请看这里:但是,我不确定是否使用
参数。被调用方
将是一个好主意…或者这样做是不好的做法我的意思是..创建具有更多“维度”的对象是不好的做法吗?@clarkk不,当然不是。多个级别都可以。创建此类对象的模式可能更好,也可能更糟。
function tst() {
    this.a = function() {
        alert( this.b.abc.c() );
    };

    this.b = function() {

    };
}

var obj = new tst();

obj.b.abc = function() {
    this.abc.c = function() { // <--- NEW 
        return 'hello world';
    };
};

obj.b.abc(); // <--- NEW
obj.a();