向对象添加函数
Add function to object
我有以下代码
var PROMO = PROMO || {};
PROMO.Base = (function () {
var _self = this;
var Init = function () {
WireEvents();
};
var WireEvents = function () {
//wire up events
};
} ());
在同一个文件中,我有调用上述函数的代码
我正试图到达一个终点,在那里我可以使用以下代码
$(document).ready(function () {
PROMO.Base.Init();
});
这给出了错误
Cannot call method 'Init' of undefined
现在我知道有很多方法可以编写javascript,但在这种情况下,我希望能够调用我的函数,或者至少可以用上面显示的方式调用Init方法。
var PROMO = PROMO || {};
PROMO.Base = (function () {
var _self = this;
var Init = function () {
WireEvents();
};
var WireEvents = function () {
//wire up events
};
var reveal = {
Init: Init
};
return reveal;
} ());
您需要返回面向公众的函数。请参阅更新的代码。
使用IIFE和直接归因对这两种模式进行处理。
使用var
会使定义私有化,并且您的函数不会返回任何内容。使用此:
PROMO.Base = {
Init: function() {
},
WireEvents: function() {
};
};
您正在使用IIFE(立即执行函数表达式(包装定义。因此,您的PROMO.Base
对象将被分配(function(){//blabla})();
返回的值。但是您的函数没有return
语句。默认情况下,它将返回undefined
。
这就是你的PROMO.Base
将是undefined
的方式,你会得到这个:
Cannot call method 'Init' of undefined
如果你真的想要IIFE:
var PROMO = PROMO || {};
// NEVER use _self = this inside static functions, it's very dangerous.
// Can also be very misleading, since the this object doesn't point to the same reference.
// It can be easily changed with Function.prototype.call and Function.prototype.apply
PROMO.Base = (function () {
_PROMO = {
Init : function () {
document.body.innerHTML += "itworks";
},
WireEvents : function () {
//wire up events
}
}
return _PROMO;
} ());
PROMO.Base.Init();
更新
更好更简单的模式是简单地将函数分配给PROMO.Base
。请注意,不应将静态函数大写,而应仅将构造函数大写。所以,如果某个东西不是要实例化的,不要称它为Init
,它应该是init
。这就是惯例。
var PROMO = {};
PROMO.Base = {};
PROMO.Base.init = function() {
console.log("this works");
};
PROMO.Base.wireEvents = function() {
console.log("this is a static function too");
};
您可以将其附加到window
对象,如。。。
window.PROMO = (function($, _){
// this will access PROMO.Base
PROMO.Base = {
// inner functions here
Init:{}
};
})(jQuery, _);
然后像你一样加载。
或者,如果您依赖jQuery
(function($){
var PROMO = {
// inner functions
Init: function(){},
WireEvents: function(){}
};
$.PROMO = PROMO;
})(jQuery);
DOM就绪
jQuery(function ($) {
var promo = $.PROMO || undefined;
promo.Base.Init();
});
相关文章:
- 为JS函数添加延迟
- 如何向这个javascript/jquery函数添加参数
- 在Jquery中分离后,如何将相同的函数添加回代码中
- 为什么我要将函数添加到对象原型中,而不是将其添加到对象中
- 正在向构造函数添加作用域变量
- 必应地图没有'当我向函数添加另一个参数时,t显示
- 向函数添加多条语句
- 将JS函数添加到并行队列中
- Javascript - 如何向对象构造函数添加属性
- 将点击函数添加到动态 HTML 链接
- 如何将 JavaScript 函数添加到 Active 类中
- 如何将回调函数添加到 .map 方法
- 使用JavaScript函数添加多个DIV元素
- 如何将函数添加到动态创建的Selectable(jqueryui)中
- 将jquery函数添加到Angular ng repeat中
- Javascript对象/名称空间-如何访问从嵌套函数添加的属性(包括示例)
- 如何在javascript中向回调函数添加附加参数
- AngularJS将函数添加到作用域
- 如何在不向现有JavaScript函数添加代码的情况下向该函数添加回调函数
- 原型-var x=[]-将函数添加到x上