相关疑难解决方法(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
查看次数

javascript var vs this

如果我的代码看起来像这样,使用var vs这个的首选方法是什么?

function MyObject() {
    var self = this;

    var a = 1;
    this.b = 2;

    var innerMethod = function() {

        logMessage(a); 
        logMessage(self.b); 
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,只要MyObject存在,var就会存活下来,所以这和使用它一样吗?

编辑:

为了更清楚地澄清这个问题,我只对从对象内部而不是从外部访问变量感兴趣.

javascript variables

14
推荐指数
2
解决办法
1万
查看次数

这两个代码片段是否相同(使用var与使用此代码)

我看到一些看起来像这样的代码:

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

你可以像这样重写它:

function foo(bar) {
   var bar = bar;
};
Run Code Online (Sandbox Code Playgroud)

因为那样你就不需要继续写this更好的了.这两行代码是否做同样的事情?

非常感谢.

javascript

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

为什么访问不存在的对象属性会导致“未定义”而不是抛出“ReferenceError”?

当我尝试使用未声明的变量时,我得到ReferenceError

\n
console.log(a); // Uncaught ReferenceError: a is not defined\n
Run Code Online (Sandbox Code Playgroud)\n

我可以先使用一个变量,然后再定义它,这样 \xe2\x80\x99 就不会因为提升而成为问题。

\n
console.log(a); // undefined\n\nvar a;\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我声明一个对象时,为什么执行上下文允许我使用它的任何属性?

\n
var obj = {};\n\nconsole.log(obj.a); // undefined\nconsole.log(obj.why); // undefined\n
Run Code Online (Sandbox Code Playgroud)\n

为什么这些是允许的,并且a从未why在任何地方声明过?

\n

javascript variables object-properties

3
推荐指数
1
解决办法
736
查看次数

标签 统计

javascript ×4

variables ×2

object-properties ×1

scope ×1

this ×1