使用原型访问对象属性

时间:2014-08-29 20:23:30

标签: javascript prototype

我知道有几种方法可以创建对象,添加方法和属性等。 有一件事我不了解原型

  function Obj () {
    var msg = "message";

    this.log = function (){
      console.log(msg);
    }
  }
  var o = new Obj();
  o.log();

这会输出消息。但是使用原型

function Obj2 () {
  var msg = "message2";

}

Obj2.prototype.log = function () {
  console.log(msg);
}

var o2 = new Obj2();
o2.log();

将输出msg未定义。 那是为什么?

2 个答案:

答案 0 :(得分:1)

msg是一个范围分别为ObjObj2的变量。

第一个示例中的log函数是在Obj范围内定义的,因此它可以访问该范围内的变量。

第二个示例中的log函数未在Obj2的范围内定义,因此不会。{/ p>

答案 1 :(得分:0)

你有@Quentin提到的范围问题,但是如果你需要访问原型函数中的变量,你需要使用它并将其视为一个类。所以现在它将被视为Obj2类的属性而不是私有变量。

所以代码就像:

function Obj2 () {
  this.msg = "message2";

}

Obj2.prototype.log = function () {
  console.log(this.msg);
}

var o2 = new Obj2();
o2.log();

Fiddle Demonstration

相关问题