Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是为对象指定属性的有效方法吗?_Javascript_Oop_Properties_This_Self - Fatal编程技术网

Javascript 这是为对象指定属性的有效方法吗?

Javascript 这是为对象指定属性的有效方法吗?,javascript,oop,properties,this,self,Javascript,Oop,Properties,This,Self,这是为对象指定属性的有效方法吗?我有一个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/else语句,我想让它确定pI的属性是什么

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
,它会给出正确的值。但这是一种好的做法吗?据我所知,如果我想要一个可以在多个方法中使用的变量,我应该将其指定为对象的属性。另一种选择是返回一个正则变量。如果正确?

您可以使用
determinatedifficity
中的
this
引用来执行对象属性赋值,而不是使用复制变量。请注意,这是因为您将
确定难度
作为游戏的对象属性。如果将其声明为“game()”中的内联函数,则
将引用内联函数,而不是游戏

但是,请注意,将所有构造函数都大写是一种良好的做法。所以它应该是
函数游戏()
而不是
函数游戏()

编辑:

您可以按照我说的直接为对象指定属性值。但是,如果将
确定难度
设置为回调函数,则
将不会引用所需的对象

//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;

单击元素时,
将引用元素,而不是
obj

这取决于-您分配给
(或示例中的
自我
)的任何内容都可以公开访问,就像您在
myGame.p
中所示。您可以在
game
函数中声明“私有”的变量,这意味着函数中的任何内容都可以访问/更改它们,但您不能在
game
之外。此
引用了我的内联函数,所以我需要将determinateDifficity设置为属性?但这是一种方法,不是一种属性?我在这里有点困惑。
this.determinatedifficity=function()…
为游戏对象提供了一个名为determinatedifficity的属性,其值是
=
右侧的函数。在执行myGame.DeterminateDifficity()函数体的过程中
将引用myGame。