Скопировать свойства в JavaScriptполное руководство 6-го? - PullRequest
0 голосов
/ 01 января 2012
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 Ответ

2 голосов
/ 01 января 2012

Первый: это не относится к функции extend.

o и p - функции.Function.name [MDN] является нестандартным свойством и не может быть переопределено.

Пример:

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

Если вы объявите o и p как объекты, то это будет работать:

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