对于我遇到的这个问题,我还没有真正找到一个清晰简洁的答案——我什至不确定如何准确地表达它。但是我正在用 Javascript 构建一个我可以重用的对象(一个“类”,如果你愿意的话)。我对对象使用 JSON 方法,因为这是我目前熟悉的唯一方法(我知道其他方法,但我还不能坐下来试验它们)。
所以,这是我正在做的一个例子:
var Thing = {
'property':{
'one':5,
'two':3
},
'action':(function(arg1, arg2){
alert(arg1 + ' ' + arg2);
return this.property.one + this.property.two;
});
}
var t = Thing;
alert(t.action('x', 'y'));
如您所见,我得到了我的对象,并且它有一些嵌套属性。还有一个函数,应该能够操纵所述属性。
我遇到的问题是范围。我试图找到一种方法来在函数中引用对象的属性,而不是假定属性属于该函数,因为它们不属于该函数。我过去做过,我只是将“this”作为参数传递给函数并且一切正常,但我敢打赌这不是好的做法。另外,如您所见,这个函数无论如何都已经接受了一些参数。运行此代码会出现错误:“Uncaught TypeError: Cannot read property 'one' of undefined”。
我想完整地保留我构建这个对象的方法——它是工作用的东西,而且这个对象已经非常大了;但我正在寻找的是某种方式“回到树上”以获取这些属性。
最佳答案
您在这里直接初始化对象。您正在使用的 JSON 东西叫做 object literal .顾名思义,它实际上是从字面上定义对象。
现在让我们来解决您的问题。
当您声明具有 this.property.one
的函数时,this
关键字将在调用时解析。它通常是浏览器上的窗口对象。 Read on more this
.所以它永远不会指向你的Thing
。您可以做的是为该类定义一个函数并将函数添加到它的原型(prototype)中。这是在 js 中实现 oop 的经典方法。
function Thing(){
this.property = {one: 5, two: 3}
}
Thing.prototype.action = function(arg1, arg2){
alert(arg1 + ' ' + arg2);
return this.property.one + this.property.two;
}
关于javascript - 范围和 JSON "class"方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23276636/