【发布时间】:2015-07-21 20:15:55
【问题描述】:
我知道这类问题已经被问过一百万次了,但我还是不明白。
JavaScript 中的一切都是对象。存在 JavaScript 运行时搜索方法和属性的原型链。这两点很清楚。我也(想我)理解new statement does 是什么。也许问题是我不明白Object.create 做了什么。我一直在使用以下 JavaScript 设计模式:
SuperClass = function(){
this.superprop = 'some super property';
};
SubClass = function(){
this.subprop = 'some (not so) super property';
};
SuperClass.prototype.someSuperMethod = function(){console.log("I'm super.")};
SubClass.prototype = Object.create(SuperClass.prototype);
SubClass.prototype.constructor = SubClass;
var instance = new SubClass();
instance.someSuperMethod(); // Great! That's super!
但是,我知道为什么我不能写了:
SubClass = Object.create(SuperClass);SubClass = SuperClass;SubClass = new SuperClass;SubClass.prototype = SuperClass.prototype;SubClass = new SuperClass();SubClass.prototype = SuperClass;
(或上述任何组合)。简而言之,我想我不知道函数的 .prototype 属性是什么,或者如果我希望 SubClass 继承 SupClass 的所有内容,我为什么需要 Object.create 这个原型。
我也不明白SuperClass.prototype.constructor 是什么意思。这个对象与SuperClass 有何不同?
我也不明白为什么我需要写new SubClass() 而不是new Subclass。有什么区别?
【问题讨论】:
-
嗯,是的,很多问题,都已经问过了。我要搜索重复项吗?
-
为什么这些组合是错误的:stackoverflow.com/questions/17392857/…
-
Object.create的作用:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
.prototype是:stackoverflow.com/questions/572897/…(它参与了new的工作) -
为什么你可以同时写
new SubClass()和new SubClass:stackoverflow.com/questions/3034941/…
标签: javascript object inheritance prototype