gpt4 book ai didi

javascript - 不明白为什么这个 JavaScript 函数可以用一种方式调用而不能用另一种方式调用

转载 作者:可可西里 更新时间:2023-11-01 02:43:15 25 4
gpt4 key购买 nike

我最近开始学习 JavaScript 是为了创建 HTML5 游戏,我遇到了一种我很难理解的行为。

例如,我有一个构造函数,它使用每次游戏更新时它们应该执行的一系列操作来初始化新 Sprite (例如动画、移动等)。 This JSFiddle演示了一个基本的实现。

本质上,我很困惑为什么这行不通...

Sprite = function () {

this.actions = [this.animate];
};

Sprite.prototype = {

animate: function () { /* animate the sprite */ },

update: function () {

this.actions[0](); // doesn't do anything (?)
}
};

...但这确实

Sprite = function () {

this.actions = [this.animate];
this.holder = 'whatever';
};

Sprite.prototype = {

animate: function () { /* animate the sprite */ },

update: function () {

this.holder = this.actions[0];
this.holder(); // executes animate function as desired
}
};

在我没有经验的人看来,这两个示例似乎应该做完全相同的事情。那么,为什么如果我直接调用 this.actions[0]() 而没有发生任何事情,但是如果我将 this.actions[0] 分配给 this.holder 然后调用 this.holder(),它工作正常吗?

最佳答案

当一个函数被调用时,一个值将被分配给函数内部一个名为this的局部变量。

除非你做了一些改变它的事情(例如new, bind(), call(), apply() ),该值将是调用它的对象。在 bar 函数中使用 foo.bar() this === foo

this.actions[0]() 使 this 等于 actions 属性的值

this.holder() 使 this 等于调用函数中 this 的值。

您的函数必须依赖于 this 的值才能执行任何操作。

关于javascript - 不明白为什么这个 JavaScript 函数可以用一种方式调用而不能用另一种方式调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354362/

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