Javascript中面向对象的编程

时间:2010-12-13 02:53:20

标签: javascript

考虑一个OOP模型。我想实施,

funct1( arg ).subfunct1( arg ); ( 

当然喜欢jQuery。你有$( arg ).subfn( arg )

的地方

我已经成功完成了一个子功能。但

funct1( arg ).subfunct1( arg ); // ==> works fine.
funct1( arg ).subfunct1( arg ).subfunct( arg ); // ==> doesnt work.

来源是:

var funct1=function() { 
    var dummy=new Object(); 
    dummy.subfunct1=bla bla; 
    dummy.subfunct2=bla bla; 
    return dummy; 
}

你能说出任何补救措施。

4 个答案:

答案 0 :(得分:3)

subfunct1必须return this才能进行可链接的调用。

答案 1 :(得分:0)

这只适用于jQuery,因为大多数函数都设置为在修改后返回它们属于(this)的jQuery对象,以便它们可以链接在一起。

你的功能有什么回报?

答案 2 :(得分:0)

有一种方法可以在没有 return this的任何对象上启用可链接调用:

function chain(obj) {
    return function() {
        var Self = arguments.callee; Self.obj = obj;
        if(arguments.length==0) return Self.obj;
        Self.obj[arguments[0]].apply(Self.obj,[].slice.call(arguments,1));
        return Self;
    }
}

用法:

function ClassA() {
    this.prop1 = null;
    this.prop2 = null;
    this.prop3 = null;
}

ClassA.prototype = {
    method1: function(argu) {this.prop1 = argu;},
    method2: function(argu) {this.prop2 = argu;},
    method3: function(argu) {this.prop3 = argu;}
}

var a = new ClassA();
chain(a)('method1',4)('method2',5)('method3',6)();

参考:http://www.javaeye.com/topic/748348(中文)

答案 3 :(得分:0)

感谢您的建议:),顺便说一下,我尝试了几个小时,因为我在概念上并不强大,并且得到了如下的工作程序..

var funct1=function() { 
    var dummy=new Object(); 
    var clone=dummy;
    dummy.subfunct1=bla bla; //you have to return every time the clone object 
    dummy.subfunct2=bla bla; //you have to return every time the clone object 
    return dummy; 
}
因此,函数(无论如何)被链接到n次 希望这有助于任何搜索我的人:)