相关疑难解决方法(0)

Javascript:我是否需要为对象中的每个变量放置this.var?

在C++中,我最熟悉的语言,通常是一个声明这样的对象:

class foo
{
public:
    int bar;
    int getBar() { return bar; }
}
Run Code Online (Sandbox Code Playgroud)

调用getBar()工作正常(忽略bar可能未初始化的事实).内部的变量bargetBar()类的范围内foo,所以我不需要说,this->bar除非我真的需要说清楚我指的是' bar而不是比如参数.

现在,我正试图在Javascript中开始使用OOP.所以,我查找如何定义类并尝试相同的事情:

function foo()
{
     this.bar = 0;
     this.getBar = function() { return bar; }
}
Run Code Online (Sandbox Code Playgroud)

它给了我bar is undefined.更改barthis.bar解决问题,但为每个变量执行此操作会使我的代码变得非常混乱.这对每个变量都是必要的吗?由于我找不到与此有关的任何问题,这让我觉得我做的事情从根本上是错误的.


编辑:是的,所以,从评论我得到的是,this.bar一个对象的属性,引用不同于bar局部变量的东西.有人可以说,为什么这就是范围和对象,以及是否有另一种方法来定义一个没有必要的对象?

javascript scope this

35
推荐指数
2
解决办法
7800
查看次数

Nodejs:获取调用函数的文件名

我想知道如何获得函数调用者的绝对路径?

让我们说:

在文件中a.js我打电话b(); b()是文件中定义的函数b.js.a.js需要b.那么如何a.jsb.js节点中获取绝对路径?

javascript node.js

23
推荐指数
4
解决办法
1万
查看次数

创建一个对外界只读的属性,但我的方法仍然可以设置

在JavaScript(ES5 +)中,我试图实现以下场景:

  1. 一个对象(其中将有许多单独的实例),每个对象都具有只读属性.size,可以通过直接属性读取从外部读取,但不能从外部设置.
  2. .size必须从原型上的某些方法维护/更新该属性(并且应保留在原型上).
  3. 我的API已经由规范定义,因此我无法对其进行修改(我正在为已定义的ES6对象处理polyfill).
  4. 我大部分时间都试图阻止人们不小心在脚下射击,并且实际上不必有防弹只读(尽管防弹越多越好),所以我愿意妥协一些只要obj.size = 3;不允许直接设置,就可以在侧门进入酒店.

我知道我可以使用在构造函数中声明的私有变量并设置一个getter来读取它,但是我必须移动需要从原型中维护该变量的方法并在构造函数中声明它们(所以他们可以访问包含变量的闭包.对于这种特殊情况,我宁愿不从原型中取出我的方法,所以我正在寻找其他选项可能是什么.

还有什么其他想法(即使有一些妥协)?

javascript getter private-members defineproperty

12
推荐指数
2
解决办法
8041
查看次数