首页 > 代码库 > javascript优化--09模式(代码复用)02
javascript优化--09模式(代码复用)02
原型继承 ://现代无类继承模式
- 基本代码:
var parent = { name : "Papa"}var child = object(parent);function object(o) { function F() {}; F.prototype = o; return new F();}
选择继承的时候可以考虑,传入实例还是构造函数原型;
var child = object(parent);var child = object(Parent.prototype);
ECMA5中的实现: Object.create();
var child = Object.create(parent, { age: {value :2}});
通过复制属性实现继承
- 浅复制:
function extend(parent, child) { var i; child = child || {}; for(i in parent) { if(parent.hasOwnProperty(i)) { child[i] = parent[i]; } } return child;}
问题:如果属性是对象的话,会仍然造成影响;
- 深复制:
function extendDeep(parent, child) { var i, toStr = Object.prototype.toString, astr = ‘[object Array]‘; child = child || {}; for(i in parent) { if(parent.hasOwnProperty(i)) { if(typeof parent[i] === ‘object‘) { child[i] = (toStr.call(parent[i]) === astr) ? [] : {}; extendDeep(parent[i], child[i]); } else { child[i] = parent[i]; } } } return child;}
混合:从多个对象中复制出任意成员,并将这些成员组成一个新的对象;
function mix() { var arg, prop, child = {}; for(arg = 0; arg < arguments.length; arg += 1) { for(prop in arguments[arg]) { if(arguments[arg].hasOwnProperty(prop)) { child[prop] = arguments[arg][prop]; } } } return child;}var cake = mix({eggs: 2, large: true},{butter: 1, salted: true},{flour: ‘3 cups‘},{sugar: ‘sure!‘});
借用方法:重用一些方法,但不想形成继承关系;
- 利用apply/call;
- 利用bind;
javascript优化--09模式(代码复用)02
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。