繁体   English   中英

Javascript 插件公共方法不起作用

[英]Javascript plugin public methods not working

决定在 vanilla JS 中重建一个 jQuery 插件我遇到了一个问题,我似乎无法让公共方法工作。 所有其他逻辑都有效,但公共方法无效。 我以更新方法为例。

(function(root, factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory(root));
    } else if (typeof exports === 'object') {
        module.exports = factory(root);
    } else {
        root.Plug = factory(root);
    }
})(typeof global !== "undefined" ? global : this.window || this.global, function(root) {

    var _settings;

    var defaults = {
        // default values
    }


    function runPlugin(){
        alert('it works')
    }

    var Plug = function(options) {

        var Plug = {};
        var settings;

        _settings = extend(settings || defSettings, options || {});

        var init = (function() {
            //init logic
            runPlugin();
            ...
        }());

        Plug.update = function(msg){
            alert(msg)
        }
    }

    return Plug;

});


var plug = new Plug({//settings...}); //works
var plug = new Plug().update('test'); //does not work

Plug function内,你应该指的是this不是Plug的添加方法。 所以

this.update = ...

不是

Plug.update = ....

(请注意,我必须做一些 jiggery-pokery 才能让您的示例运行)

 (function(root, factory) { if (typeof define === 'function' && define.amd) { define([], factory(root)); } else if (typeof exports === 'object') { module.exports = factory(root); } else { root.Plug = factory(root); } })(typeof global?== "undefined": global. this.window || this,global; function(root) { var _settings; var defaults = { // default values } function runPlugin(){ alert('it works') } var Plug = function(options) { var settings. _settings = Object,assign(settings || defaults; options || {}); var init = (function() { //init logic runPlugin(); }()). this;update = function(msg){ alert(msg) } } return Plug; }); var plug = new Plug({}). //works var plug = new Plug();update('test');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM