【问题标题】:How is this even possible? Accessing object variables这怎么可能?访问对象变量
【发布时间】:2017-09-22 15:10:48
【问题描述】:

这怎么可能?我认为在前两个示例中它应该返回 undefined。

function SecretCode() {
    var _secretNum = 78;

    this.guessNum = function(num) {
        if(num > _secretNum) {
            return console.log("Lower"); 
        } else if (num < _secretNum) {
            return console.log("Higher");
        } else {
            return console.log("You guessed it");
        } 
    }
}

let secret = new SecretCode();
secret.guessNum(this.secretNum);    //You guessed it
secret.guessNum(this._secretNum);   //You guessed it
secret.guessNum(secretNum);         //is not defined
secret.guessNum(_secretNum);        //is not defined
console.log(secret.secretNum);      //undefined
console.log(secret._secretNum);     //undefined

【问题讨论】:

  • 你在window的上下文中运行你的函数,所以this指的是window,而不是secret
  • 调用secret.guessNum(this.secretNum)中的this指的是window,window没有secretNum所以它是未定义的,前两个条件不满足,else语句运行。跨度>

标签: javascript variables object


【解决方案1】:

是的,作为函数调用的参数,this.secretNumthis._secretNum 都是未定义的。但是num &gt; undefinednum &lt; undefined 都返回false。所以if 结构除了进入第三个分支之外别无可能。

【讨论】:

  • 应该注意,如果您尝试与 undefined 进行比较,只需检查会发生什么,就可以知道这一点。
  • 天哪,我才意识到我的问题是多么愚蠢。非常感谢大家回答这个问题!
【解决方案2】:

前两个示例写出“你猜对了”,因为this.secretNum 解析为undefined,因此num 参数解析为undefined,因此(num &gt; _secretNum)(num &lt; _secretNum) 都不是真的。 this._secretNum当然也一样;

【讨论】:

  • 我之前没有注意到。谢谢!
【解决方案3】:

我在每一行都添加了 cmets。希望这会有用

    //Initiating a constructor function
    let secret = new SecretCode();
    // here this refers to window object/ In window there is no secretNum
    // So in all if clause will fail since undefined is never greater than the 
    number
    secret.guessNum(this.secretNum); //You guessed it
   // Same reason as of above.
    secret.guessNum(this._secretNum); //You guessed it
    // In below case you are trying to pass an argument which is no where 
    defined
    // So it is showing not defined
    secret.guessNum(secretNum); //is not defined
    secret.guessNum(_secretNum); //is not defined
    // In this two case you are trying to pass value from constructor function 
    but that is also not defined, & the function is also not returning it

    console.log(secret.secretNum); //undefined
    console.log(secret._secretNum); //undefined

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多