使用`this` vs Object.create(原型)

时间:2015-10-10 22:12:32

标签: javascript object prototype this

我一直在使用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。我做了大约十年之后。互联网从未真正忘记,但进展仍然存在。因此,一些教程似乎基于较旧的标准/建议,而较新的文章与它们相矛盾。理清哪些文章是最新的和哪些文章是过时的,这变得令人困惑。我可以帮忙。

1 个答案:

答案 0 :(得分:2)

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) { };