繁体   English   中英

Javascript中的构造函数和子属性

[英]Constructors and Subproperties in Javascript

我有以下内容:

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创建,该函数在Velocity属性下创建一个粒子对象。

JavaScript会在Particle对象下,还是在Particle.Velocity下为父对象构建Vector对象的属性? 为了缩短它,新的Particle()会创建:

Particle.X

或者最好这样:

Particle.Velocity.X

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

它将是Particle.Velocity.X 不是因为具体的范围this ,而是因为你这样做:

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

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

this工作方式不同的JavaScript所以这是值得花一些时间去了解它。 它不直接绑定到声明/写入的对象,而是在运行时绑定到不同的东西,具体取决于函数/方法的调用方式。

例如,请考虑以下事项:

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

正如您所料,上面的代码警告“我的名字是弗兰克”。 但是,如果你这样做:

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

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

有关this在javascript中如何工作的完整描述,请参阅我对这个其他问题的回答: Javascript中的“this”关键字如何在对象文字中起作用?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM