- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 this 关键字访问、更改 PIXI.Sprite(或其他对象)的属性并将其绑定(bind)到函数范围。使用与 this 不同的名称似乎很荒谬,但我无法弄清楚。
在 javascript 上解决此类 oop 问题的正确方法是什么。
function createEmoji(x , y ) {
let t = new PIXI.Texture.fromImage(`assets/image (${1+~~(Math.random()*80)}).png`);
let i = new PIXI.Sprite(t);
i.anchor.set(.5);
i.angle = Math.random() * 360;
i.mag = Math.random() * 3;
i.x = x;
i.vx = Math.cos(i.angle) * i.mag;
i.rotation = i.angle;
i.tint = Math.random() * 0xffffff;
i.y = y;
i.vy = Math.sin(i.angle) * i.mag;
i.ax = 0;
i.ay = 0;
i.speed = Math.random() / 100;
container.addChild(i);
return i;
}
添加i.bind(this)给出
Uncaught TypeError: i.bind is not a function
at new createEmoji
更新
好吧,我用 JavaScript 所谓的 class 关键字来理解这一点。
class createEmoji extends PIXI.Sprite {
constructor(x, y) {
super();
this.texture = new PIXI.Texture.fromImage("assets/emoji.png");
this.x = app.rw;//random position method for x and y
this.y = app.rh;
this.t = Vec(x, y, test, window);//another method returns ObservablePoint
this.scale.set(.5 + Math.random() * .5);
this.anchor.set(.5);
}
}
这解决了我一直在寻找的问题。
最佳答案
你无法改变this
指的是函数体内。
有四种方法可以确定 this
指:
obj.func()
) 的属性来调用,以便将该对象绑定(bind)到 this
在函数内部。new
从“类”实例化一个对象。这将绑定(bind)this
在函数内部到具有您的函数的对象 prototype
属性作为其原型(prototype),这也将是 new
的(默认)返回值表达。 (本质上,该函数接收正在构造的对象 this
,使其成为“构造函数”)。.bind(obj)
函数的方法来生成另一个函数,该函数始终将对象绑定(bind)为 this
当被调用时。.call(…)
或.apply(…)
方法并将您想要的任何对象传递为 this
在函数内部作为第一个参数。如您所见,所有这些都是确定 this
内容的方法。引用来自调用站点(或者甚至之前,在 bind
的情况下),因此您无法更改 this
的内容指向函数调用本身内部。
但是,您似乎对 JavaScript 中的 OOP 处理方式感到有些困难,所以让我来解决您的问题。
您似乎正在使用您的createEmoji
函数作为构造函数,但您返回 PIXI.Sprite
上的实例。这似乎是困惑的主要根源:为什么你会返回不是 this
的东西?这里?感觉不对。
事实上,这并不是您真正想要的。相反,请对待 createEmoji
作为一个免费函数。如果您有 Java 背景,请考虑 static
方法。您可以将其称为 var emoji = createEmoji(...);
并将其记录为返回 PIXI.Sprite
。它本质上是一个静态工厂方法。没有this
现在参与此通话,所以幸运的是您现在有了更清晰的了解。
另一个解决方案是转换 createEmoji
到一个成熟的Emoji
类,使 Sprite 成为该类的成员(即,将其称为 this.sprite
而不是 i
)。在这种情况下,构造函数会将新的表情符号实例设置为 this
并且您不需要返回任何东西。除非您的表情符号需要与简单 Sprite 不同的自己的表示和行为,否则我不会这样做,因为它更加复杂。
tl;dr:不要使用createEmoji
作为构造函数,但作为返回 Sprite 的函数。就像那样,你所有关于应该做什么的直觉this
e 消失了,因为没有 this
参与其中。
关于javascript - 如何在javascript上将对象属性绑定(bind)到this关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44609496/
如果我创建一个对象时没有使用 new 关键字,例如“Object s(someval)”,但该对象的构造函数使用了 new,当该对象超出范围时,是否会调用析构函数为其分配新的空间?我感觉好像是,但我不
在 SQL 语法中,我发现奇怪的规则表明 select * from ONLY (t1)是有效的 SQL。 我的问题是:什么是 ONLY在这种情况下是什么意思? 它在规范的“7.6 table ref
为什么使用 $(this) 而不是重新选择类很重要? 我在代码中使用了大量的动画和 CSS 编辑,并且我知道可以使用 $(this) 来简化它。 最佳答案 当您通过 jQuery 执行 DOM 查询(
我正在尝试使用 IN 关键字编写查询。 表A 属性标识、属性名称 表B key 、属性标识、属性值 根据提供的 key ,我想返回所有 attrName、attrVal 组合。结果将包含两个表中的列。
这个问题在这里已经有了答案: Why would you use "AS" when aliasing a SQL table? (8 个答案) 关闭 9 年前。 我不擅长写查询,但是从我开始使用
我读过,在 Java 中,您不必将 this 关键字显式绑定(bind)到对象,它由解释器完成。它与 Javascript 相反,在 Javascript 中你总是必须知道 this 的值。但是 Ja
Swift 中“with”关键字的用途是什么?到目前为止,我发现如果您需要覆盖现有的全局函数,例如 toDebugString,可以使用该关键字。 // without "with" you
这个问题在这里已经有了答案: What does the keyword "where" in a class declaration do? (7 个答案) 关闭 9 年前。 在下面的一段代码中(
免责声明:swift 菜鸟 您好,我刚刚开始学习 Swift,正在学习 Swift 编程语言(Apple 在 WWDC 期间发布的书籍),并且想知道“where”关键字是什么。它用于 let vege
深入研究文档后,我找不到以下问题的答案: 是否有任何理由反对使用 this 来引用当前对象,如下例所示? type MyStruct struct { someField string } fun
前言 最近在做THINKPHP开发项目中,用到了 parent:: 关键字,实际上 parent::关键字 是PHP中常要用到的一个功能,这不仅仅是在 THINKPHP 项目开发中,即使是一个小型
我们都知道且经常用到 unsigned 关键字,但有没有想过,与此对应的 signed 关键字有啥用? 复制代码 代码如下: int i = 0; signed
this关键字再java里面是一个我认为非常不好理解的概念,:)也许是太笨的原因 this 关键字的含义:可为以调用了其方法的那个对象生成相应的句柄。 怎么理解这段话呢? thinking i
一 什么是 synchronized synchronized 关键字提供了一种锁机制,能够确保共享变量互斥访问,从而防止数据不一致问题的出现。 synchronized 关键字包括 monitor
最近看了几篇 synchronized 关键字的相关文章,收获很大,想着总结一下该关键字的相关内容。 1、synchronized 的作用 原子性:所谓原子性就是指一个操作或者多个操作,要么全部执行并
在本教程中,您将借助示例了解 JavaScript 对象方法和 this 关键字。 在 JavaScript 中,对象也可以包含函数。例如, // object containing meth
有人可以解释一下 PHP“with”的作用吗? 示例开始: 假设我有一个类: \App\fa_batch 这句话有什么区别: $w = (with (new \App\fa_batch))
这个问题在这里已经有了答案: What is the difference between using the colon and as syntax for declaring type? (2
如果我在 WHERE 子句中使用以下任一项,是否会有很大不同: WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID]
This question is unlikely to help any future visitors; it is only relevant to a small geographic are
我是一名优秀的程序员,十分优秀!