我了解到self一词在javascript中没有特殊含义。在代码下面,虽然如果写成var Life = function(....),很明显,但作者决定执行var _ = self.Life = function(...)。虽然我了解var _部分(以便在内部使用较短的名称来指代相同的东西),但我没有得到self.Life(而不是Life)。有人可以解释一下吗?
(function() {
var _ = self.Life = function(seed) {
this.seed = seed;
this.height = seed.length;
this.width = seed[0].length;
this.prevBoard = [];
this.board = cloneArray(seed);
};
_.prototype = {
next: function() {
//
},
toString: function() {
return this.board.map(function(row) {
return row.join(' ');
}).join('\n');
}
};
function cloneArray(array) {
return array.slice().map(function(row) {
return row.slice();
});
}
})();
undefined
var game = new Life([
[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 1, 0, 1]
]);
undefined
console.log(game + ' ');
最佳答案
不,但是它是predefined global on browsers,引用当前窗口(就像window
确实*)。所以
var _ = self.Life = function...
...正在使
Life
成为全局性的,而不会成为The Horror of Implicit Globals **的牺牲品。现场简要示例:
(function() {
var _ = self.Life = function() {
console.log("Hi there");
};
new _();
})();
new Life();
*
window
和self
以前对当前窗口的引用略有不同,但是在现代浏览器中,window === self
是true
,是window
和self
的默认值。**(这是我贫乏的小博客上的帖子)
关于javascript - javascript改用新名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46131011/