首页 > 网站 > WEB开发 > 正文

JavaScript Patterns 6.5 Inheritance by Copying Properties

2024-04-27 14:21:20
字体:
来源:转载
供稿:网友

javaScript Patterns 6.5 Inheritance by Copying PRoperties

2014-07-19 12:53 by 小郝(Kaibo Hao), ... 阅读, ... 评论, 收藏, 编辑

Shallow copy pattern

function extend(parent, child) {    var i;    child = child || {};    for (i in parent) {        if (parent.hasOwnProperty(i)) {            child[i] = parent[i];        }    }    return child;}

Deep copy pattern

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;}var dad = {    counts: [1, 2, 3],    reads: {        paper: true    }};var kid = extendDeep(dad);kid.counts.push(4);kid.counts.toString(); // "1,2,3,4"dad.counts.toString(); // "1,2,3"(dad.reads === kid.reads).toString(); // falsekid.reads.paper = false;kid.reads.web = true;dad.reads.paper; // true

Firebug (Firefox extensions are written in Javascript) has a method called extend()that makes shallow copies and jQuery’s extend() creates a deep copy. YUI3 offers a method called Y.clone(), which creates a deep copy and also copies over functions by binding them to the child object.

Advantage

There are no prototypes involved in this pattern at all; it’s only about objects and their own properties.

References:

JavaScript Patterns -by Stoyan Stefanov(O`Reilly)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表