我正在编写一个小型JavaScript游戏框架,并经常使用对象的属性,比如
this.depth = this.y;
Run Code Online (Sandbox Code Playgroud)
但这些this'非常令人讨厌@ _ @.有没有办法写...
depth = y;
Run Code Online (Sandbox Code Playgroud)
......不影响全球对象?
我的情况下,通过两个工厂函数创建的,并且他们做预定义变量的一个有限列表,所以个个都depth,y等等的功能被应用于实例.apply()方法,尽管这一切可能会发生变化.
我需要省略this关键字的原因是该框架不仅适用于我,也适用于其他人.我不需要this在框架中删除,但this关键字在编写基于此库的应用程序时会花费很多时间.到目前为止,我所知道的唯一解决方案是制作"私有"变量,但它给以前没有使用过JavaScript的人带来了一些不便,而且从obj2操纵obj1会导致许多匿名函数.apply- 甚至更多地狱.所以,正如我所看到的,JavaScript中没有灵丹妙药.
构造函数:
/*...*/
'Copy' : function (type) {
var obj = {
'x':0,
'y':0,
'xprev':0,
'yprev':0,
/*...*/
};
return obj;
},
'make' : function (type,x,y) {
obj = ct.types.Copy(type);
obj.x = obj.xprev = obj.xstart = x;
obj.y = obj.yprev = obj.ystart = y;
/*...*/
ct.stack.push(obj);
}
/*...*/
Run Code Online (Sandbox Code Playgroud)
geo*_*org 12
如果没有看到任何代码,你的问题很难回答,但总的来说,基于工厂和闭包的"现代"JavaScript OOP比用new's和this'es 的旧的"想要Java"风格更简洁,更惯用.
老式:
function Something() {
this.depth = 0;
}
Something.prototype.incDepth = function() {
this.depth++;
}
foo = new Something()
Run Code Online (Sandbox Code Playgroud)
新风格:
function Something() {
var depth = 0;
return {
incDepth: function() {
depth++;
}
}
}
foo = Something()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |