javascript - 范围和 JSON "class"方法的问题

标签 javascript json object scope

对于我遇到的这个问题,我还没有真正找到一个清晰简洁的答案——我什至不确定如何准确地表达它。但是我正在用 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/

相关文章:

javascript - 使用 jQuery 将 html 添加到 div

javascript - 将innerWidth和innerHeight更改为自定义尺寸THREEjs

java - 能够使用 jackson 循环从 json 响应返回的每个用户

c++ - 将二维对象数组的指针传递给方法

javascript - React - 如何循环和更新对象模型中的值?

javascript - rollup 是否将 node_modules 捆绑到 bundle.js 中?

php - 创建用于 jstree 的有效 JSON 对象时遇到问题

java - 如何获取ListArray中存储的数据

c# - 将根 XML 元素反序列化为数组

javascript - 从提交查询中删除美元符号