使用 `this` 与 Object.create(prototype)

Using `this` vs Object.create(prototype)

我一直在使用 JSLint 来帮助我重新学习如何正确编码。该程序不喜欢在我的代码中使用 this,因此我决定使用 self=Object.create(MyType.prototype)。使用这种模式有什么陷阱或限制吗?我只是避免 this 太冗长了吗?这是我如何使用原型继承编写构造函数的示例:

function MyType(args) {
    var privateVar1 = "value",
        self = Object.create(MyType.prototype);

    function privateFunction() { )

    self.publicMethod1 = function(aa) {
        // do stuff with private vars & self. Ex:
        var methodVar = privateVar1 + aa;
        self.publicProperty = args;
        privateFunction();
        return methodVar;
    };

    return self;
}
MyType.prototype = {
    publicProperty: "initial value",
    publicMethod2: function (aa) { }
}

function MyType2(args) {
    var self = Object.create(MyType2.prototype);
    return self;
}
MyType2.prototype = Object.create(MyType.prototype);
MyType2.prototype.publicMethod3 = function (aa) { };

经过长期停工,我再次自学 JavaScript。自从我做任何事情以来已经大约十年了。互联网从未真正忘记,但进步仍在发生。所以一些教程似乎是基于旧的 standards/suggestions 而新的文章与它们相矛盾。区分哪些文章是最新的,哪些是过时的变得越来越混乱。我需要一些帮助。

JSLint 工具只告诉您 Douglas Crockford 希望您如何使用 JavaScript。 JSLint 这个名称相当具有误导性,因为它不根据语言标准验证代码,而是根据 Douglas Crockfords 关于如何使用该语言的观点来验证代码。如果您想一字不差地听从他的建议,那么您就做对了。

其他教程不一定过时或错误,它们大多只是不同而已。 JavaScript有很多不同的使用方式,不只有一种。

就个人而言,我会写:

function MyType(args) {
  var privateVar1 = "value";

  function privateFunction() { )

  this.publicMethod1 = function(aa) {
    // do stuff with private vars & this. Ex:
    var methodVar = privateVar1 + aa;
    this.publicProperty = args;
    privateFunction();
    return methodVar;
  };
}

MyType.prototype = {
  publicProperty: "initial value",
  publicMethod2: function (aa) { }
}

function MyType2(args) {
}
MyType2.prototype = Object.create(MyType.prototype);
MyType2.prototype.publicMethod3 = function (aa) { };