在javascript中复制属性??权威指南6?

时间:2012-01-01 18:08:54

标签: javascript properties copy

function extend(o, p) {
    for(prop in p) {                        
        o[prop] = p[prop];                  
    }
    return o;
}
function o() {};
function p(){};
p.name='caicai';
p.show=function(){ alert(this.name);};
p.show(); // output p
extend(o, p);
o.show(); // output o

为什么"输出"在这里?为什么不输出' caicai'。

function extend(o, p) {
    for(prop in p) {                        
        o[prop] = p[prop];                  
    }
    return o;
}
function o() {};
function p(){};
p.poo='caicai';
p.show=function(){ alert(this.poo);};
p.show(); // output 'caicai'
extend(o, p);
o.show(); // output 'caicai'

但是在这里? 为什么"输出"在这里?为什么不输出' caicai'。

1 个答案:

答案 0 :(得分:2)

首先:这与extend功能无关。

op是函数。 Function.name [MDN]是非标准属性,无法覆盖。

示例:

> function foo() {}
  undefined
> foo.name
  "foo"
> foo.name = 'bar';  // assigning a new value
  "bar"
> foo.name           // does not work
  "foo"

如果您将op声明为对象,那么它会起作用:

> var foo = {};
  undefined
> foo.name
  undefined
> foo.name = 'bar';
  "bar"
> foo.name
  "bar"