Object.Create与Object.create(name)vs Object.create(name.prototype)

时间:2017-04-18 07:27:41

标签: javascript

即时通讯即时学习javascript,我试图了解关键的差异。 我可以用Object.create(someName)创建对象,我可以创建 Object.create(someName.prototype)但我不太明白关键的区别。 我应该把属性作为常规属性吗? 比如someName.asomeName.prototype.a? 它对我来说有点混乱。 我理解当使用Object.Create我用对象im指定我的对象原型链时,我可以指定someNamesomeName.prototype,但我似乎无法完全理解差异和最佳实践。 非常感谢您的帮助。 :)

1 个答案:

答案 0 :(得分:0)

Object.create创建一个新对象,其原型是作为整个函数的第一个参数传递的原型。

在JavaScript中,prototype属性是具有特殊权力的常规对象,但正如我已经说过的那样,它仍然是常规对象。< / p>

因此,何时使用x或x.prototype 的问题取决于您的要求。

例如:

var obj = { name: "Matías" };

// This will create a new object whose prototype
// is the object contained in the "obj" variable
var obj2 = Object.create(obj);

实际上,对象不拥有prototype属性。当你想从一些构造函数的原型创建一个对象时,你可以使用另一种方法:

var A = function() {};
A.prototype.doStuff = () => {
    // do stuff here
};

// A common mistake is to provide A instead of A.prototype.
// In JavaScript, even functions are objects, hence if you provide
// A instead of A.prototype, the prototype of the newly created object
// will be the function A and its members, not the ones that would be available
// creating an object like this: new A()
var B = Object.create(A.prototype);
B.doStuff();

var C = Object.create(A);
// Function "doStuff" is undefined!!
C.doStuff();