JavaScript中的三维对象

时间:2013-04-02 15:05:34

标签: javascript oop

我正在尝试在JavaScript中创建三维对象。我希望能够运行这样的东西:

object1().object2().object3();

但我不希望能够像这样访问“object3()”:

object1().object3();

当我尝试这个时:

function object1(){
    alert("object 1");
    function object2(){
        alert("object 2");
        function object3(){
            alert("object 3");
        }
    }
}

它运行第一个警报,但随后chrome给了我这个错误:

TypeError: Object #<object1> has no method 'object2'

当我尝试这个时:

function object1(){
    alert("object 1");
    this.object2 = function(){
        alert("object 2");
        this.object3 = function(){
            alert("object 3");
        }
    }
}

它运行前两个然后chrome给我这个错误:

TypeError: Cannot call method 'object3' of undefined

2 个答案:

答案 0 :(得分:4)

要进行方法调用链接,您需要返回对this的引用:

function object1(){
    alert("object 1");
    this.object2 = function(){
        alert("object 2");
        this.object3 = function(){
            alert("object 3");
        }
        return this;
    }
    return this;
}

(工作)在这里小提琴:http://jsfiddle.net/MmJjR/

(作为旁注,这不是“三维对象”。对象不像数组。这些是嵌套对象,其中每个都有对下一个“子”对象的引用。很容易理解是什么你的意思是,我以为我会在那里扔一个术语。)

答案 1 :(得分:1)

object1 = function(){
    console.log("object 1");
    this.object2 = function(){
        console.log("object 2");
        this.object3 = function(){
            console.log("object 3");
        }
        return this;
    }
    return this;
}

object1().object2().object3()

也许是这样的?

http://jsfiddle.net/rd13/T2EG2/