最近项目中使用到Requirejs、Backbone、Handlebars,对Backbone的Model可以绑定change、destory比较奇怪,
查看其源码,大概明白了什么意思,在此记录下自己的简单实现,以此作为笔记备忘。
(function(w){ var Model = function(){}; Model.prototype.data = []; Model.prototype._callback = []; Model.prototype._callbackOp = []; Model.prototype.add = function(key,value){ this.data[key] = value; var callback = this._callback['change']; if( callback&&typeof callback==='function' ){ callback.apply(this,this._callbackOp['change']); } }; Model.prototype.get = function(key){ return this.data[key]; } Model.prototype.bind = function(on,func,op){ this._callback[on] = func; this._callbackOp[on] = op; } w.Model = Model; })(window); function callback(paramA,paramB){ alert('model对象改变了:key='+paramA+',value='+paramB); }; var person = new Model(); person.bind('change',callback,['参数1','参数2']); person.add('name','gavin'); alert('get方法取值:'+person.get('name'));
另外顺便记录下javascript中call、apply的使用,每次都需要查询,老记不住,⊙﹏⊙b汗!
区分apply,call就一句话,
例子:
function A(mA,mB){ alert('A,mA='+mA+';mB='+mB); }; function B(){ alert('B'); A.apply(this,['参数A','B中apply调用']); A.call(this,'参数A','B中call调用'); }; B();
call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的。所以每个Function对象也就是每个方法都有call, apply属性。注意对象实例没有prototype方法,即使用了new后的对象。