var prototype = new this();有人可以解释John resig在他的类继承博客中使用的这个陈述吗?

时间:2013-06-23 18:13:18

标签: javascript

博客网址 - > http://ejohn.org/blog/simple-javascript-inheritance/

以下是摘录。

var _super = this.prototype;
initializing = true;
var prototype = new this();
initializing = false;

我对使用new this();

感到难过

2 个答案:

答案 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;

请注意extendClass的方法(即函数属性)。在任何方法中,this指的是对象,它们是[1]的方法。所以在Class.extendthis === 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;