这是将属性分配给对象的有效方法吗?

Is this a valid way to assign properties to an object?

本文关键字:有效 方法 对象 属性 分配      更新时间:2023-09-26

这是一个有效的方式来分配属性的对象?我有一个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,它会给我正确的值。但这是好的做法吗?据我所知,如果我想要一个可以在多个方法中使用的变量-我应该将其作为对象的属性赋值。另一种替代方法是返回this is一个常规变量。如果这是正确的?

您可以使用determineDifficulty内部的this引用来执行对象属性分配,而不是使用复制变量。注意,这是有效的,因为你把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