【问题标题】:Binding of javascript object properties [duplicate]绑定javascript对象属性[重复]
【发布时间】:2012-10-17 00:07:05
【问题描述】:

可能重复:
Why does javascript object show different values in console in Chrome, Firefox, Safari?

我对使用 javascript 的 OOP 概念还是很陌生。我试图了解 javascript 属性的绑定。 javascript 是否按顺序执行以下代码?

 // main.js
 function NameClass(){
   this.name = "John"
   this.age = 25
 }

 NameClass.prototype.change_my_name = function(new_name){
   this.name = new_name
 }

 NameClass.prototype.change_my_age = function(new_age){
   this.age = new_age
 }


 // main.html
  <html>
    <head>
      <title>Javascript tutorial</title>
        <script src="main.js"></script>
        <script>
          var nc = new NameClass()

          console.log("nc before modification")
          console.log(nc) // Prints Doe

          nc.change_my_name("Doe")

          console.log("nc after modification")
          console.log(nc) // Prints Doe
        </script>
      </head>
    <body></body>
  </html>

现在,这里有什么技巧?

  1. 为什么我会看到两次都显示“Doe”?
  2. 为了第一次显示“John”而第二次显示“Doe”,我必须在这里使用什么机制?

【问题讨论】:

  • 我假设您使用的是 Chrome?这是 Chrome 开发者控制台中记录对象的一个​​已知错误。
  • 对。 nc.name 显示的值很好。

标签: javascript oop binding


【解决方案1】:

console.log() 不一定会记录变量在您尝试记录时的值。

【讨论】:

  • ... 没有中断。用“警报”做同样的事情。你会看到值的变化。
  • ... 或使用 QUnit 进行测试。您将看到两个不同的值。
  • 或者只是将所需的日志值作为字符串(不是对象)并将其记录下来。它在使用字符串时有效,但在使用对象时无效。
  • @jfriend00 :Firefox 按预期记录对象状态。当我们尝试记录对象时,问题出在 Chrome 中。不过,日志字符串在两种浏览器中都可以正常工作
  • @Vineeth - 是的,我知道这是 Chrome 的问题。我的建议是,如果您只将字符串传递给console.log(),那么您在 Chrome 中就没有问题。
猜你喜欢
  • 2019-08-22
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多