我尝试实现一个功能例如MyFn()具有以下一些功能:
1. MyFn('Id')>必须是document.getElementById('Id');的结果。
2. MyFn('Id')。MyMethode(); >必须是执行功能的结果。
在下面,这通过“ Object.prototype”实现,如下所示:

Object.prototype.MyFn =function(param1){ return document.getElementById(param1); };
alert( MyFn('mydiv1') );
MyFn('mydiv1').posi = function() { alert("Hello, I'm the function posi!"); };
MyFn('mydiv1').posi();
alert( MyFn('mydiv1') );


上面的示例正是我想要实现的。但是我不想使用Object.prototype或jQuery。
下面是我的错误方法(这可能是我想要说或要做的事):

var MyObj = {
    method: function(args, callback) {
        if(typeof callback == "function") {
            callback();
        }
        return 123;
    }
}

MyFn = function(sId) {
    return MyObj;
};

alert( MyFn("mydiv1").method() ); // This is ok, because it calls the method: MyObj.method() as it was expected.
alert( MyFn("mydiv1") ); // <-- But here I like to get document.getElementById("mydiv1").


注意:代码的语法(调用函数的方式)很重要!该函数将按以下方式调用:MyFn('Element-Id')或MyFn('Element-Id')。posi(),但不能如下所示:MyObj.MyMethode()
您有什么想法吗?提前致谢。

最佳答案

您可以尝试类似:

var MyObj = {
    method: function(args, callback) {
        if(typeof callback == "function") {
            callback();
        }
        return 123;
    }
}

var MyFn = function(sId) {
    this.elem = document.getElementById(sId);
    this.MyObj = MyObj;
    return this;
};

alert( MyFn("mydiv1").MyObj.method() );
alert( MyFn("mydiv1").elem );


函数执行后,这将返回对函数的引用,因此提供的语法非常类似于C#扩展方法。

10-01 03:59
查看更多