`

javascript对象绑定事件

 
阅读更多

最近项目中使用到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汗!

 

 

 写道
JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象

 

 

区分apply,call就一句话,

 

 

 写道
foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3)

 

例子:

 

	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后的对象。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics