2017-04-18 118 views
0

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

+0

'someName'指的是一个对象,而'someName.prototype'指的是另一个对象,所以哪一个你应该使用Object.create()真的取决于你想要达到的目标。同样,在'someName.a'或'someName.prototype.a'之间进行选择取决于您想要实现的内容 - 如果您将属性添加到原型,那么具有该原型的* all *对象将有权访问它,这是其他时间有助于帮助。 – nnnnnn

+0

非常感谢! –

回答

0

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

在JavaScript中,prototype属性与特殊权力一个有规则的,但正如我已经说过,它仍然是一个常规对象

因此,何时与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(); 
+0

谢谢,现在更清楚:)! –