2

我正在尝试在 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
4

2 回答 2

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/

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

于 2013-04-02T15:10:09.113 回答
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/

于 2013-04-02T15:11:33.987 回答