javascript - 在 JS 中使用这个还是新的?

标签 javascript this declare

我有 3 个代码:

var control = new Control();

function Control() {

   this.doSomethingElse = function() {...}
   this.doSomething = function () {
       control.doSomethingElse();
   }

}

或者

var control = new Control();

function Control() {
   var self = this;

   this.doSomethingElse = function() {...}
   this.doSomething = function () {
       self.doSomethingElse();
   }
}

或者

var control = Control();

function Control() {
   var self = this;

   this.doSomethingElse = function() {...}
   this.doSomething = function () {
       self.doSomethingElse();
   }

  return self;
}

重要:函数是一个 Controller ,只声明一次。然后我在我的代码中到处使用“控制”......

我想知道 control.doSomethingElse() 是否很慢?

最后,在这些示例中,正确的做法和/或最快的代码是什么?

谢谢!

最佳答案

第一个是错误的——一个对象不应该在内部使用它在外部已知的变量名。其他代码可能会更改该变量以指向其他内容,从而破坏此代码。

第三个也是错误的 - 当在没有 new 的情况下调用 Control() 时,对 this.foo 的赋值最终会附加到全局对象(除了在严格模式下,在裸函数调用中没有隐式 this,因此对 this.doSomethingElse 的赋值尝试附加到 undefined,导致运行时错误)。

这只剩下第二个是合适的,但最终这是一个正确性问题,而不是性能问题。

关于javascript - 在 JS 中使用这个还是新的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34375003/

相关文章:

javascript - 通过插件在管理页面加载自定义js文件

javascript - 隐藏或禁用 DevExtreme Scheduler 中的编辑属性以及其他问题?

javascript - 为什么 'this' 在使用 Promise 时在类方法内部未定义?

c++:为什么 'this' 不能是 nullptr?

variables - 为什么 perl6 不能自动激活,这样我就不必一直使用 "my"?

bash - 为什么 bash 脚本中需要 "declare -f"和 "declare -a"?

javascript - 如何解决 jquery mask 插件的问题?

javascript - 未绑定(bind) ember 每个助手,无需脚本标签

javascript - 如何在 Javascript (ES6) 中正确定义子类构造函数?

c - 声明相互使用的结构和函数引用