[英]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
是一個變量,其作用域分別為Obj
和Obj2
。
第一個示例中的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.