標籤:io ar sp java on cti bs html ad
<!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>
js執行個體屬性和原型屬性