js物件導向編程-prototype

來源:互聯網
上載者:User

看到同事用Dean Edwards寫的base.js來實現js的物件導向編程,因此在研究了一下。本文基本是代碼測試的例子,來簡單說明一下javascript物件導向編程的基本用法

/**
 * @author gongpb
 * 對一個對象添加執行個體方法和屬性-使用prototype關鍵字進行賦值-的格式:
 * 對象名稱.prototype = {
 * 屬性一 : 屬性值,
 * 屬性二 : 屬性值,
 * 方法一 : function(參數列表) {
 *    方法體;
 *    },
 * 方法二 : function(參數列表) {
 *    方法體;
 *    }
 * }
 * 這樣通過new一個對象就可以通過執行個體名稱.屬性或方法來擷取屬性或執行方法了
 */
function HelloWorld()
{
    alert('hello world!');
}

function test(){
 var obj = new HelloWorld();
 obj.sayHello(); //先hello world! 後js(一個是構造方法中的alert,一個是sayHello方法中的alert)
}
//給HelloWorld添加屬性name和方法sayHello
HelloWorld.prototype = {
 name:"js",
 sayHello:function(){
  alert(this.name);
 }
};

//test();

/**
 * 如何給一個對象賦一個私人成員變數呢?
 * 那我們就可能要改一下HelloWorld類的聲明方式了,
 * 不使用prototype進行類的屬性和方法聲明,
 * 而是直接使用內嵌函數和屬性進行聲明,修改的HelloWorld如下:
 *
 * 直接在函數內部進行了函數嵌套申明,
 * 而且我們還設定了一個局部變數privateProp,即我們的私人成員變數,
 * 該變數只能被HelloWorld2內部的函數進行訪問,外部存取是不允許的,
 * 這樣我們就可以通過使用變數的範圍來巧妙的設定類的私人變數了
 */
function HelloWorld2(){
 var privateProp = "hello word 2!";
 this.myMethod = function(){
  alert(privateProp);
 };
}
function test2(){
 var obj = new HelloWorld2();
 alert(obj.myMethod()); //alert:hello word 2!
 alert(obj.privateProp); //alert:undefined
}
//test2();
/**
 * JS中如何為一個類定義靜態類方法和類屬性呢?
 * 我們可以直接為類添加靜態屬性和靜態方法,
 * 比如為HelloWorld類添加一個age的靜態屬性和一個hello的靜態方法,那麼聲明如下:
 */
function HelloWorld3(){
 alert("hello world3");
}
//定義的靜態變數
HelloWorld3.age = 22;
//定義靜態方法
HelloWorld3.hello = function(){
 alert(HelloWorld3.age);
};
HelloWorld3.prototype = {
  sayHello:function(){
   alert("sayHello");
  }
};
function test3(){
 var obj = new HelloWorld3(); //alert:hello world3
 obj.sayHello(); // 正確,執行個體方法,可以通過執行個體進行訪問
 //obj.hello();  //錯誤,不能通過執行個體訪問靜態方法。會報JS錯誤!
 HelloWorld3.hello(); // 正確,靜態方法,通過類名進行直接存取
}
test3();

var pro = {
  prop:"test",
  myMethod:function(){
   alert(this.prop);
  }
};
pro.myMethod();

//實現javascript的繼承:

var A = function() {  

};   
A.prototype = {   
  sayHello: function() {  
   alert("sayHello A");  
 }   
};   
  
var B = function() {
 
};   
B.prototype = A.prototype;   
  
var b = new B();  
b.sayHello();

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.