javascript代码复用模式-----现代继承
2014-06-04 09:03
441 查看
一、原型继承
javascript本来就没有class一说,只不过很多人极力的去模拟成为强类型语言的样子。原型继承更加高效,直观。核心思想,就是提供一个原型对象由我来继承。
二、属性复制
通过复制对象属性,达到复用代码的目的。也就是克隆。克隆分为深拷贝和浅拷贝。在此就不多说,网上例子很多。
三、函数借用
通过apply和call方法,借用其他对象的方法。很实用。需要注意的就是方法的执行作用域。你可以使用保存作用域或闭包来解决。最好自己封装一个bind函数,高级浏览器都已经支持了,低版本浏览器还不支持。
注:关于this指向的问题,不要在定义的时候去判断,应该在方法执行的时候去判断,哪个对象执行了该方法,this就指向哪个对象。
javascript本来就没有class一说,只不过很多人极力的去模拟成为强类型语言的样子。原型继承更加高效,直观。核心思想,就是提供一个原型对象由我来继承。
二、属性复制
通过复制对象属性,达到复用代码的目的。也就是克隆。克隆分为深拷贝和浅拷贝。在此就不多说,网上例子很多。
三、函数借用
通过apply和call方法,借用其他对象的方法。很实用。需要注意的就是方法的执行作用域。你可以使用保存作用域或闭包来解决。最好自己封装一个bind函数,高级浏览器都已经支持了,低版本浏览器还不支持。
if(typeof Function.prototype.binda !== 'function'){ Function.prototype.binda = function(context){ //支持部分参数,用于在多个参数,且多个参数相同的时候。 var args = Array.prototype.slice.call(arguments,1), target = this; return function(){ var args2 = Array.prototype.slice.call(arguments); console.log(this); target.apply(context,args.concat(args2)); } } } var aa = { name:'alan', say:function(a,b){ console.log(this.name+a+b); } } function say(a,b){ console.log(this.name+a+b); } //指定执行作用域 var say2 = say.binda(aa,'ddd'); say2('ccc');//结果 alanddccc
注:关于this指向的问题,不要在定义的时候去判断,应该在方法执行的时候去判断,哪个对象执行了该方法,this就指向哪个对象。
相关文章推荐
- 复制所有属性进行继承 转自 博客园 汤姆大叔 深入理解JavaScript系列(46):代码复用模式(推荐篇)
- javascript代码复用模式-----传统继承
- 深入理解JavaScript:代码复用模式(推荐篇)
- javascript代码复用--继承
- javascript优化--08模式(代码复用)01
- 简单谈谈javascript代码复用模式
- JavaScript代码复用模式
- JavaScript代码复用模式实例分析
- 深入理解JavaScript系列(46):代码复用模式(推荐篇)
- javascript优化--09模式(代码复用)02
- javascript代码复用模式
- 深入理解JavaScript系列(45):代码复用模式(避免篇)
- 深入理解JavaScript系列(46):代码复用模式(推荐篇)
- 自我学习——javascript——代码复用常见模式
- javascript-代码复用模式
- 深入理解JavaScript系列(46):代码复用模式(推荐篇)
- javascript代码复用--继承
- 初涉JavaScript模式 (13) : 代码复用 【上】
- 深入理解JavaScript系列(45):代码复用模式(避免篇)
- javascript代码复用模式