gpt4 book ai didi

javascript - 关于这个关键字在 javascript 中的最佳使用

转载 作者:行者123 更新时间:2023-12-02 18:14:05 24 4
gpt4 key购买 nike

我有几个关于 JavaScript 上“this”关键字使用的问题。

<小时/>
  1. 不断使用 this 确实会将整个函数对象重载到 RAM 内存中吗?
  2. 最好声明一下
<小时/>
MyClass = function(){ 
this.name = "Petter";
this.age = 12;
this.toString = function(){
return "Name: "+this.name + " Age: " + this.age;
}
}

而不是

<小时/>
MyClass = function(){
var _this = this;
_this.name = "Petter";
_this.age = 12;
_this.toString = function(){
return "Name: "+_this.name + " Age: " + _this.age;
}
}

或者你可以向我推荐什么?

最佳答案

不,这不是真的,我从来没有听说过这样的事情。

你所做的一切

var _this = this;

正在创建一个变量来指向使用this时引用的内存中的对象。无论你说:

this.name = "Petter";

_this.name = "Petter";

您仍在将属性分配给同一个对象。引用该对象的方式(_thisthis)没有区别。

编辑

当您想在不同的范围内使用 this 时,您通常需要获取对 this 的引用(setTimeout 就是一个很好的例子)。

    var MyClass = function() {
setTimeout(function() { this.myMethod(); },100);
};

MyClass.prototype.myMethod = function() {
console.log('hi there');
}

var myObject = new MyClass();

在上面的代码中,您会收到错误,因为当执行 setTimeout 函数时,它是在全局范围内执行的,其中 this === window 并且您没有名为 的函数window 对象上的 myMethod()

要纠正这个问题,您可以这样做:

    var MyClass = function() {
var self = this;
setTimeout(function() { self.myMethod(); },100);
};

MyClass.prototype.myMethod = function() {
console.log('hi there');
}

var myObject = new MyClass();

即使您的 setTimeout 函数在全局范围内执行,变量 self 实际也指向 MyClass 的实例(或 this)因为你做了 self = this (并且因为 JavaScript 是 lexically scoped

另外,这只是个人喜好,您会经常看到这样的情况:

var self = this;

而不是

var _this = this;

没什么大不了的,但这只是我认为值得一提的惯例。

关于javascript - 关于这个关键字在 javascript 中的最佳使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19453206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com