javascript - 如何在 javascript 中编写具有扩展功能的函数?

标签 javascript html

我尝试实现一个功能,例如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.prototypejQuery
以下是我的错误方法(这可能对我想说的或要做的有帮助):

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# 扩展方法等。

关于javascript - 如何在 javascript 中编写具有扩展功能的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621872/

相关文章:

javascript - JQuery Mobile 单击时将所选选项复制到其他下拉列表

javascript - 无法在 IE 中选择文本区域中的文本

javascript - 需要将值从 JavaScript 传递到 servlet 页面

php - 如何按自定义字段日期订购 wordpress 帖子?

javascript - 使用拖放 REDIPS

javascript - AngularJS 输入类型数字与字符串模型

javascript - 在canvas.js气泡图上加载文本内容值

javascript - JS 编码 HTML 标签不起作用

javascript - 主干模型设置值不会触发更改事件

javascript - 使用字符串作为reactDOM.render、marked.js 和 babel 的输入