詳情請仔細研讀注釋,這裡就廢話少說,直接上代碼了。
復制代碼 代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>測試文檔</title>
<script type="text/javascript">
// 實質上屬性和方法是一樣的,方法是屬性為引用型的函數。
//一個對象有4種屬性:
// 1,構造函數通過this關鍵字定義的屬性
// 2,構造函數通過var關鍵字定義的屬性
// 3,構造函數的原型對象添加的屬性
// 4,對象動態添加的屬性
//實例的公有屬性:1 通過this關鍵字定義的屬性 可訪問 1,2,3,4
//實例的私有屬性:2 通過var關鍵字定義的屬性。 可訪問 2
//實例的共享屬性:3 通過實例指向的原型添加的屬性。 可訪問 1,3,4
//實例的靜態屬性:4 對象動態添加的屬性。 可訪問 1,3,4
//總結:
// 實例屬性:1,公有
// 2,私有
// 4,靜態
// 原型屬性:3,共享
//this定義的為特權屬性。全部可訪問
//var定義的為私有屬性。
//動態添加的屬性為公有屬性。不可訪問私有屬性
//實例對象指向的原型屬性為原型屬性。不可訪問私有屬性,優先級低於公有屬性
//實例屬性主要有公有屬性和特權屬性構成。均可被外部和原型屬性訪問。主要區別在於是否可訪問私有屬性
//原型屬性優先級低於實例屬性。可被外部訪問和實例屬性訪問(除私有屬性)
//-----------------此處為分割線-----------------------------
// 公有屬性:對象暴露給外部環境的屬性。也是對象的屬性。
// 私有屬性:對象內部的屬性,往往不可訪問.在構造函數層面上考慮才有意義。
// 靜態屬性:動態添加的屬性。也是對象的屬性。
// 共有屬性:所有構造函數生成的實例所共享的屬性。
function User(){
// 公有屬性:每new一個User實例對象,都有的屬性。
// 為實例屬性,所有實例的屬性不共享內存。
// 外部可訪問。
this.name='byronvis';
// 特權方法:每new一個User實例對象,都有的方法。
// 為實例方法,所有實例的方法不共享內存。
// 外部可訪問。
// 可訪問公有屬性。
// 可訪問私有屬性。
this.sayName=function(){
alert(this.name);
alert(this.school);
alert(age);//變量聲明會自動提前。
alert(this.sex);
};
// 私有屬性:外部不可訪問。
// 僅對構造函數有意義,對於new的User實例對象無意義。
var age=22;
// 私有方法:外部不可訪問。
// 僅對構造函數有意義,對於new的User實例對象無意義。
function sayAge(){
alert(age);
}
sayAge();
}
// 共有屬性: 共享內存。
User.prototype.school='zky';
// 共有方法:可訪問公有屬性。
// 共享內存。
User.prototype.saySchool=function(){
alert(this.school);
alert(this.name);
alert(this.sex);
alert(age);
};
var obj=new User();
// 靜態屬性:就是動態添加的實例屬性。
obj.sex='man';
// 靜態方法:就是動態添加的實例方法。
obj.saySex=function(){
alert(this.sex);
alert(this.name);
alert(this.school);
alert(age);
};
//-----------------此處為分割線-----------------------------
//// 證明this關鍵字定義的屬性和動態添加的屬性本質上一樣的,都可認為是實例對象的公有屬性。
// 驗證: this關鍵字定義的屬性訪問動態添加的屬性
// obj.sayName();//true
// 驗證:動態添加的屬性訪問this關鍵字定義的屬性
// obj.saySex();//true
// 驗證:公有屬性訪問私有屬性
// obj.sayName();//true
obj.saySex();//false
// 驗證:共享屬性訪問私有屬性
// obj.saySchool();//false
</script>
</head>
<body>
測試文檔
</body>
</html>
小伙伴們是否看明白了,了解了實例屬性和原型屬性了嗎?本文講述的非常的詳細,推薦給大家,希望對小伙伴們能有所幫助