如何避免 Javascript 中的 `this` 和 `new` 关键字?
How to avoid the `this` and `new` keywords in Javascript?
这是我的代码:我想避免使用 this
(第 3 行)和 new
(第 23 行)。我想这样做是因为 Douglas Crockford 认为它们有害。
"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");
如果您有构造函数,则需要使用 new
来创建对象。您可以在函数中创建一个对象,然后 return 它代替它。
(请注意,这是一个 "anonymous" 对象,而不是 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");
由于您的原始代码是半途实现为 class 的东西,我想展示它如何完全实现为 class:
"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();
这是我的代码:我想避免使用 this
(第 3 行)和 new
(第 23 行)。我想这样做是因为 Douglas Crockford 认为它们有害。
"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");
如果您有构造函数,则需要使用 new
来创建对象。您可以在函数中创建一个对象,然后 return 它代替它。
(请注意,这是一个 "anonymous" 对象,而不是 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");
由于您的原始代码是半途实现为 class 的东西,我想展示它如何完全实现为 class:
"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();