首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让具有"this“上下文的类中的变量

让具有"this“上下文的类中的变量
EN

Stack Overflow用户
提问于 2017-05-23 03:36:34
回答 3查看 2.2K关注 0票数 0

所以我有一个关于this的问题,就是在类中有正常变量。

通常我们会做这样的事情:

代码语言:javascript
复制
class Thingy {
  constructor(thing) {
    this.id = thing
  }
  printID() {
    console.log(this.id)
  }
}
let newthingy = new Thingy("ID1")
let newthingy2 = new Thingy("ID2")
newthingy.printID()
newthingy2.printID()

它工作得很好,但是这样的事情不会:

代码语言:javascript
复制
class Thingy {
  constructor(thing) {
    let id = thing
  }
  printID() {
    console.log(id)
  }
}
let newthingy = new Thingy("ID1")
let newthingy2 = new Thingy("ID2")
newthingy.printID()
newthingy2.printID()

因此,我知道newthingy将不知道id是什么,所以它不只是查找原型链回原来的类原型吗?我意识到它可能无法得到正确的id,但是为什么我们会得到一个id not defined error,它应该首先查找原型链吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-23 05:32:47

这与原型完全无关。它比你想象的要简单得多:

“类方法”仅仅是作用于一个对象的函数。它们对对象的作用方式是通过this进行的。这就是全部。它是一个普通函数,它有对this的隐式访问,它是一个对象。因为在Javascript中,this的值是在调用时决定的,所以这是一种非常灵活的机制:

代码语言:javascript
复制
function foo() {
    console.log(this.bar);
}

foo.call({ bar: 'baz' });

let baz = { bar: 'baz' };
baz.foo = foo;
baz.foo();

正如您所看到的,您甚至不需要一个class就可以让this工作。一个类只是将其形式化为一个特定的模式:

new Thingy在设置为this.id = thing的构造函数中创建一个新对象并在其上调用Thingy constructor,在该新对象上创建id属性。然后调用newthingy.printID()时,调用printID函数将其this上下文设置为先前创建的对象(newthingy),因此this.id工作。

id值作为对象的属性从constructor传输到printID。如果您只使用id (而不是this.id),那么您只是试图访问一个不存在的局部变量。

票数 1
EN

Stack Overflow用户

发布于 2017-05-23 03:41:16

我相信这都是关于范围的。你说..。

代码语言:javascript
复制
let id = thing

..。实际上,您声明的变量是构造函数方法的本地变量。当你定义..。

代码语言:javascript
复制
this.id = thing

..。它实际上是修改Thingy实例的属性值。而且,当printID试图访问"id“时,它没有上下文可以在其中找到"id”。

票数 2
EN

Stack Overflow用户

发布于 2017-05-23 06:11:21

“构造函数”和“printID”都是在它们处定义的functions.Variables,其他人无法到达。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44125378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档