Javascript 如何在本地函数中去掉'this'关键字?
我正在编写一个小型JavaScript游戏框架,经常使用对象的属性,比如Javascript 如何在本地函数中去掉'this'关键字?,javascript,this,Javascript,This,我正在编写一个小型JavaScript游戏框架,经常使用对象的属性,比如 this.depth = this.y; 但是这些这些是很烦人的。有没有一种方法可以写下 depth = y; …不影响全局对象 我的实例是通过两个工厂函数创建的,它们构成了一个预定义变量的有限列表,因此所有这些变量都具有深度,y,等等。函数通过.apply()方法应用于实例,尽管它们都可以更改 我需要省略这个关键字的原因是,这个框架不仅是为我设计的,也是为其他人设计的。我不需要在框架本身中删除this,但是this关
this.depth = this.y;
但是这些这些是很烦人的。有没有一种方法可以写下
depth = y;
…不影响全局对象
我的实例是通过两个工厂函数创建的,它们构成了一个预定义变量的有限列表,因此所有这些变量都具有深度
,y
,等等。函数通过.apply()
方法应用于实例,尽管它们都可以更改
我需要省略这个
关键字的原因是,这个框架不仅是为我设计的,也是为其他人设计的。我不需要在框架本身中删除this
,但是this
关键字在基于此库编写应用程序时可以节省大量时间。到目前为止,我知道的唯一解决方案是生成“private”变量,但这给以前没有使用过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);
}
/*...*/
你的问题很难在没有看到任何代码的情况下回答,但一般来说,基于工厂和闭包的“现代”JavaScript比带有
new
和this
的旧的“wannabeJava”风格更冗长、更惯用
旧式:
function Something() {
this.depth = 0;
}
Something.prototype.incDepth = function() {
this.depth++;
}
foo = new Something()
新样式:
function Something() {
var depth = 0;
return {
incDepth: function() {
depth++;
}
}
}
foo = Something()
似乎是XY问题。不,我想,你必须用这个来表示当前对象
this=t;t、 深度=y
。。。但是是的,这个
是语言的一部分。你可以和一起使用,但每个人都会避开你。如果你需要这个
,因为你的意思是这个
,你需要写这个
。如果你不需要这个
,因为你不是说这个
,那么你应该省略这个
。你的问题真的没有一个答案<代码>这个做了一些非常具体的事情,如果这是你想要做的,那么这就是你需要做的。有时候你真的需要输入5个额外的字符才能得到你想要的。需要注意的是,“新样式”效率较低,因为它会为每个实例创建许多incDepth
副本。这就是prototype
和this
的目的,在没有实际类的情况下,拥有一个具有代码继承的更高效的类Java对象。“新样式”还阻止您扩展原型(您可以尝试通过将构造函数替换为向结果中添加方法的包装器来实现同样的目的,但这更容易出错)或者通过检查对象的.constructor
属性来确定对象的类型,这在试图了解以“旧样式”编写的文档记录不良的库时通常很有用。