What is a practical advantage of Object.create over Constructor function?
本问题已经有最佳答案,请猛点这里访问。
所以我来自古典的OOP语言,并试图围绕javascript原型风格。
尝试理解函数构造函数模式和Object.create模式之间的区别:
函数构造函数我可以创建私有函数和方法,如下所示:
1 2 3 4 5 6 7 8 9 | function Human() { this.public ="public accessible variable"; let private ="private only accessible inside Human"; } Human.prototype.speak ="hahahaha"; var child = new Human(); Console.log(child.public) // prints console.log(child.private) // don't print |
优点:
方法。
-
子对象是指人类原型
__proto__ - >[[prototype]] (?)
Object.create我只能:
对象(而不是Human的原型)
但那又怎么样?将child的原型直接设置为人类构造函数有什么实际优势?
实际使用的例子会有所帮助!
调用构造函数:
1 | const child = new Human(); |
是(几乎)相同:
1 2 | const child = Object.create(Human.prototype); Human.call(child); |
因此,我不会将
没有构造函数的原型链的用例非常有限。 一个例子是
1 2 3 | const serialized = JSON.stringify(child); // Human inheritance gets lost, its a plain object now const child2 = Object.assign(Object.create(Human.prototype), JSON.parse(serialized)); |