这是将属性分配给对象的有效方法吗?我有一个if / else语句,我希望它确定 p 和 i 的属性。
function game(){
var self = this;
this.determineDifficulty = function(){
var difSet = document.getElementById("dif");
var chosen = difSet.options[difSet.selectedIndex].value;
if(chosen === "Easy"){
var d = 0;
self.p = 1;
self.i = 1000;
}else if(chosen === "Medium"){
var d = 1;
self.p = 0.1;
self.i = 100;
}else{
var d = 2;
self.p = 0.01;
self.i = 10;
}
return d;
}
}
var myGame = new game();
如果我提醒myGame.p
,它会给我正确的值。但这是好习惯吗?据我所知,如果我想要一个可以在多个方法中使用的变量 - 我应该将其指定为对象的属性。另一种选择是返回这是一个常规变量。如果这是正确的?
答案 0 :(得分:1)
您可以使用this
内的determineDifficulty
引用来执行对象属性赋值,而不是使用复制变量。请注意,这是有效的,因为您将determineDifficulty
作为游戏的对象属性。如果你在'game()'中将它声明为内联函数,则this
将引用内联函数,而不是游戏。
但请注意,优化所有构造函数是一种好习惯。所以它应该是function Game()
而不是function game()
编辑:
你可以像我说的那样直接将属性值分配给对象。但是,如果您将determineDifficulty
设置为回调函数,则this
将不会引用您需要的对象。
//For Example:
function Obj() {
this.foo = 5;
this.set_foo = function() {this.foo = 10; }
}
var obj = new Obj();
alert(this.foo); //5
obj.set_foo();
alert(this.foo); //10
//The Following will not work
element.onclick = obj.set_foo;
点击元素后,this
将引用该元素,而不是obj
。