用javascript在实例方法中实例化对象
instantiating an object inside an instance method in javascript
我正在尝试使用javascript创建一个小游戏,一切都很顺利,直到我必须发射一些东西,我需要实例化一个"子弹"并发射它,但当调用"new bullet()"时,我得到了一个"Unaught TypeError:undefined不是函数"。如何在另一个对象方法中实例化一个对象?
这就是我做的
function bullet(){
//here it would be state for the bullet, like x and y and thigs
console.log("bullet created");
}
function gun(){
//state for the gun, amount of bullets and sort
console.log("gun created");
this.fire = function(){
//here we instantiate a bullet and fire it
console.log("begin fire");
var bullet = new bullet();
console.log("created bullet to fire");
}
}
var gun = new gun();
gun.fire();
在javascript中,您的变量会被提升。为了清楚这意味着什么,编译器将您编写的代码视为已编写的代码:
function gun(){
//state for the gun, amount of bullets and sort
console.log("gun created");
this.fire = function(){
var bullet;
//here we instantiate a bullet and fire it
console.log("begin fire");
bullet = new bullet();
console.log("created bullet to fire");
}
}
因此,在JS中,所有变量声明都被移到当前函数范围的顶部。请注意,并非所有编程语言都是这样。在某些语言中,您可以忽略以上内容,并且bullet
变量将成功地取代bullet
函数。
最好的解决方案是给变量取一个不同的名称。
function gun(){
//state for the gun, amount of bullets and sort
console.log("gun created");
this.fire = function(){
//here we instantiate a bullet and fire it
console.log("begin fire");
var mybullet = new bullet();
console.log("created bullet to fire");
}
}
此外,正如匈牙利人所说,我认为你误解了JS中的new
运算符。
编辑:阐明了吊装的含义。
下面是发生的事情。
当调用gun.fire();
时,局部变量bullet
被声明并初始化为"undefined",而表达式的其余部分则被求值。此表达式的求值将查找一个名为bullet
的变量,并在局部作用域中找到它,忽略全局作用域中的项目符号变量。
这教会了我一些关于javascript的新东西,变量声明不是原子性的。
要解决这个问题,请将fire方法中的bullet变量重命名为firedBullet。
相关文章:
- 在requirejs中共享实例化对象
- 在 Typescript 中实例化对象,遵循松散耦合
- 用javascript在实例方法中实例化对象
- ThreeJS:实例化对象会将其位置设置为零
- Javascript prototypíng 和实例化对象的“this”
- 如何在 JavaScript 中实例化对象链
- 存储对通讯簿应用的实例化对象的引用
- 我想在实例化对象时返回 false
- 将用户单击绑定到实例化对象
- 绑定到类外部按钮的公共属性与实例化对象时内部绑定的按钮的值不同
- 在Backbone,js中实例化对象与函数
- 我如何在JS中动态地要求模块、实例化对象和调用函数
- 如何实例化对象文字
- 不能在javascript (node.js)中实例化对象
- 在实例化对象(使用构造函数)时设置唯一的id
- 我'm困惑的地方,我将实例化对象在angular
- 实例化对象,而不是将它们存储在变量中
- 如何从惰性实例化对象继承
- 在JavaScript中按类型实例化对象
- 是否可以在jQuery/Javascript中存储非实例化对象的信息?