在Javascript

时间:2016-06-04 19:37:50

标签: javascript inheritance

我正在通过JavaScript中的Prototypal Inheritance审核Crockford的this post。他提到创建Object.create函数(现在包含在ECMA Script 5中),用于创建从其他对象继承而不使用new关键字的新对象,因为它是从Java等经典语言中借用的。代码是:

if (typeof Object.create !== 'function') {
 Object.create = function (o) {
    function F() {}
    F.prototype = o;
    return new F();
 };
}
newObject = Object.create(oldObject);

我想知道为什么我们需要为此创建一个构造函数?我们不能简单地使用文字符号创建一个空对象,将其原型更改为旧对象并返回该对象吗?像这样:

 if (typeof Object.create !== 'function') {
        Object.create = function (o) {
            F = {};
            F.prototype = o;
            return F;
        };
    }

我测试了这种方法,但它无法正常工作:

    var oldObject = { name: "Steve", lastname: "Jobs" };
    var newObject = Object.create(oldObject);
    console.log(newObject.name); // this outputs undefined.
    console.log(newObject.prorotype.name); // this works. But shouldn't newObject.name automatically search the prototype in above code when it did not find the property in the local object?

这是fiddle。请注意,我已将函数名称更改为小提琴中的create1和create2,因为我不想覆盖内置的create函数。

有人可以解释为什么这不能按预期工作吗?

0 个答案:

没有答案