Object.create
期望Object作为原型链的第一个参数,而不是函数(或您的情况下的构造函数)。
如果你传递一个函数它不会抱怨,但这意味着某些额外的东西将被你创建的Object继承,例如,函数名的不可写性。
你得到一个空字符串的原因是因为test
它是一个匿名函数,test.name
所以""
. 正如我上面所说,这是不可写的,所以
test.name = 'foo';
test.name; // still ""
如果您对 使用命名函数表达式,test
这将更加明显。
var test = function foobar() {},
ex = Object.create(test);
ex.name; // "foobar"
编辑一个行为类似于usingnew
的函数看起来像这样test
Object.create
function myNew() {
var o = Object.create(test.prototype); // set up prototype inheritance
test.apply(o, arguments); // then construct
return o;
}
// and using it
var test3 = myNew('AAA');
test3.name; // "AAA"
test3.name = 'BBB';
test3.name; // "BBB"
不保证此模式适用于 DOM 构造函数。