javascript - Javascript 中的构造函数和子属性

标签 javascript web

我有以下内容:

function Vector(X,Y,Direction)
{
    this.X = X,
    this.Y = Y,
    this.Direction = Direction
}

function Particle(Position,Size)
{
    this.Position = Position,
    this.Size = Size,
    this.Velocity = new Vector(0,0,0)
}

Vector 是一个构造函数,它创建一个向量对象,该对象是由另一个构造函数 Particle 创建的,Particle 在 Velocity 属性下创建一个粒子对象。

JavaScript 是否会将构造的 Vector 对象的属性设置为 Particle 对象或 Particle.Velocity 下的父级?简而言之,new Particle() 会创建这个:

粒子.X

或者最好是这样:

粒子.速度.X

这个问题可能措辞不好,抱歉。我只是很难理解 JavaScript 中“this”关键字的范围。

最佳答案

它将是Particle.Velocity.X。并不是因为 this 的范围,而是因为您这样做了:

this.Velocity = new Vector(0,0,0);

您正在分配给 Particle 对象的 Velocity 属性。

但是 this 在 javascript 中的工作方式有所不同,因此值得花一些时间来理解它。它不会直接绑定(bind)到声明/写入的对象,而是在运行时绑定(bind)到不同的事物,具体取决于函数/方法的调用方式。

例如,请考虑以下内容:

var foo = {};
foo.name = 'Frank';
foo.say = function () {alert('My name is' + this.name)}
foo.say();

如您所料,上面的代码会发出警报“我的名字是 Frank”。但是,如果你这样做:

var bar = {};
bar.name = 'Benny';
bar.say = foo.say;
bar.say();

上面的代码将提醒“我的名字是本尼”。这是因为 this 绑定(bind)到点之前的最后一个单词/名称。因此,即使该函数最初是在 foo 的上下文中声明的,一旦使用 bar 作为容器对象调用它,其中的 this 就会引用到

有关 this 在 javascript 中如何工作的完整说明,请参阅我对另一个问题的回答:How does the "this" keyword in Javascript act within an object literal?

关于javascript - Javascript 中的构造函数和子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19417065/

相关文章:

database - 将网站表格导入 excel 的宏

javascript - 广告拦截器(例如网页内容过滤)的引用

javascript - 在 C++ 中将 ostream 分配给数据类型字符串

javascript - 网站图形平滑过渡

javascript - 当使用 jQuery 完成表单提交时,如何发送非空输入?

javascript - 类型错误 : Cannot read property 'sid' of undefined

python - 如何在 python flask 中设置全局变量?

java - 在 Java EE 中创建网络爬虫

javascript - 基于其位置的可拖动 DIV 样式

javascript - 加载 JSON 数据而不是将其嵌入到页面上