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