如何避免Javascript中的`this`和`new`关键字?

时间:2015-05-08 13:47:07

标签: javascript jslint

这是我的代码:我想避免使用this(第3行)和new(第23行)。我想这样做是因为道格拉斯·克罗克福德认为它们有害。

"use strict";
function capWord(inStr) {
   this.firstIndex = function(inStr) {
   document.write(capWord.upper(inStr[0])); 
   capWord.space(inStr); 
   };

   capWord.space = function(inStr) {
      for(var i=1;i<inStr.length;i=i+1) { 
         document.write(inStr[i]);
         if (inStr[i] == " ") {
            document.write(capWord.upper(inStr[i+1]));
            i = i+1;
          }
       }
   };

   capWord.upper = function(charUpper) {
      return charUpper.toUpperCase();
   }
}

var insCapWord = new capWord();
insCapWord.firstIndex("learning cool stuff");

1 个答案:

答案 0 :(得分:1)

如果您有构造函数,则需要使用new来创建对象。您可以在函数中创建一个对象并返回它。

(请注意,这是一个&#34;匿名&#34;对象,而不是capWord的实例。)

将函数作为属性赋值给函数本身并没有多大意义。如果你只在函数中使用它们,你可以在函数内部使它们成为局部声明的常规函数​​。

"use strict";

function capWord(inStr) {
    return {
        firstIndex: function (inStr) {
            document.write(upper(inStr[0]));
            space(inStr);
        }
    };

    function space(inStr) {
        for (var i = 1; i < inStr.length; i = i + 1) {
            document.write(inStr[i]);
            if (inStr[i] == " ") {
                document.write(upper(inStr[i + 1]));
                i = i + 1;
            }
        }
    }

    function upper(charUpper) {
        return charUpper.toUpperCase();
    }
}

var insCapWord = capWord();
insCapWord.firstIndex("learning cool stuff");

由于您的原始代码是作为一个类实现的中途,我想展示它如何作为一个类完全实现:

"use strict";

function CapWord(inStr) {
    this.str = inStr;
}

CapWord.prototype = {
    firstIndex: function() {
        document.write(this.upper(this.str[0]));
        this.space();
    },
    space: function() {
        for (var i = 1; i < this.str.length; i = i + 1) {
            document.write(this.str[i]);
            if (this.str[i] == " ") {
                document.write(this.upper(this.str[i + 1]));
                i = i + 1;
            }
        }
    },
    upper: function(charUpper) {
        return charUpper.toUpperCase();
    }
};

var insCapWord = new CapWord("learning cool stuff");
insCapWord.firstIndex();