簡體   English   中英

使用原型訪問對象屬性

[英]Accessing object properties with 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是一個變量,其作用域分別為ObjObj2

第一個示例中的log函數在Obj的范圍內定義,因此它可以訪問該范圍的變量。

第二個示例中的log函數未在Obj2范圍內定義,因此Obj2

您遇到了@Quentin提到的范圍問題,但是,如果您需要訪問原型函數中的變量,則需要利用此變量並將其視為類。 因此,現在它將被視為類Obj2的屬性,而不是私有變量。

因此,代碼將類似於:

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

}

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

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

小提琴示范

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM