博客网址 - > http://ejohn.org/blog/simple-javascript-inheritance/。
以下是摘录。
var _super = this.prototype;
initializing = true;
var prototype = new this();
initializing = false;
我对使用new this();
感到难过答案 0 :(得分:2)
有助于在上下文中看到它。即:
Class.extend = function(prop) {
var _super = this.prototype;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
initializing = false;
请注意extend
是Class
的方法(即函数属性)。在任何方法中,this
指的是对象,它们是[1]的方法。所以在Class.extend
,this === Class
内。因此new this()
相当于new Class()
。
他这样做的原因有点奇怪。他试图建立某种“类层次结构”,其中所有内容都来自Class
,有点像Java或C#中的所有内容都来自Object
。
我不推荐这种方法。
[1]只有在将方法作为方法调用时才会出现这种情况,例如Class.extend(...)
,而不是当它被称为函数时,例如var extend = Class.extend; extend(...)
。
答案 1 :(得分:1)
继承:(取自here)
ChildClassName.prototype = new ParentClass();
继承类。ChildClassName.prototype.constructor = ChildClassName
。这里new this()
引用了继承的ParentClass&存储在变量原型。
您引用的代码中的原型变量发生了什么,也是类似的。
// Populate our constructed prototype object
Class.prototype = prototype;
// Enforce the constructor to be what we expect
Class.prototype.constructor = Class;