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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值