javascript (對象構建方式)

來源:互聯網
上載者:User

1、  Function對象

Javascript沒有重載的概念每個對象隱含 arguments對象(實際接收的參數),length屬性接收對象期望的參數個,arguments.length,表示實際接收參數個數 ;

var add =function(number){alert(number);};

等價於 var add= new Function(“number”, “alert(number)”);// 最後一個參數表示函數體

 等價於 function add(number){alert(number)};

因為是對象的引用,多個同名函數會被最後一個覆蓋,與參數個數無關

2、  資料類型:Undefined(undefined)、Null(null)、Number(number)、String(string)、Boolean(true/false)共5種未經處理資料類型var s = “a”; alert(typeof s) return 'string'

typeof 傳回值 'undefined'、'object、'number'、'string'、'boolean'

javascript 如果聲明的函數沒有傳回值或return,那麼返回undefined—undefined是從null派生出來的

強制類型轉換:只有三種 Boolean(value), String(value),Number(value):數字轉換錯誤return NaN,未定義不可以轉換,Boolean沒什麼用,不建議使用。

3、  Javascript 可以動態添加、刪除屬性

Object obj = new Object();

obj.username = “zhangsan”;// obj[“usernam”]= “zhangsan”;

delete obj.username;//

var object = {username: “zhangsan”, password: “lisi”,gender:function(){…}}//最常見的定義對象的方式,屬性用逗號隔開

4、  數組

var array = new Array();

array.push(1);

array.length

// var array = [1, 3, 23];// 更常用

Arrays.sort(array);// 1,23,3,先轉換成字元,按字串升序排序,顯然不可靠,一般自訂排序

類似java

function compare (num1, num2)

{

     varnum1 = parseInt(num1);

     varnum2 = parseInt(num2);

     if(num1 < num2) return -1;

     elseif(num1 > num2) return 1;

     else  return 0;   

}

Var array = [1, 3, 25];

array.sort(compare);// 函數名是對象的引用

arrayà [1 3 25]

5、  建立對象的方式(Javascript只有對象的概念)

A:    // 1: 基於已有的對象進行擴充

      var object = {username: “zhangsan”, password: “lisi”,gender:function(){…}}//最常見的定義對象的方式,屬性用逗號隔開

      --------------------------------------------------------------------------

      var object = newObject();//比較適合臨時建立的對象

      object.name ="zhangsan";

      object.password ="123";

      object.sayName =function(name)

     {

           this.name =name;

           alert(this.name);

      }

     object.sayName("lisi");

B: // 2: Factory 方法       

      function createObject(name, password)

      {

           var object = newObject();

           object.name =name;

           object.password= password;

           /*

           object.get =function()

           {

               alert(this.name+ ", " + this.password);

           }

           */

           object.get =get;// 推薦.屬性專屬,方法共用

           return object;

      }

      function get()

      {

           alert(this.name+ ", " + this.password);

      }

      var obj1 =createObject("zhangsan", "123");

      obj1.get();

      var obj2 =createObject("wanger", "3434");

      obj2.get();

C:// 3: 建構函式方式

      function Person(name,password)

      {

           this.name =name;

           this.password =password;

           this.getInfo =function()

           {

               alert(this.name+ ", " + this.password);

           }

           // 隱含產生的對象

      }

 

      var p = newPerson("zhangsan", "wanger");

      p.getInfo();

D // 4: 使用原型方式(prototype); 屬性值必須在對象產生之後賦值;屬性引用方式(值改變)和Java是一樣的;屬性會被其他對象共用,該變屬性,其他對象可以能發生改變,如果是參考型別的話,常量類型的則不會發生改變

      function Student(){}

      Student.prototype.name= "zhangsan";

      Student.prototype.password= "lkjldjfl";

      Student.prototype.getInfo= function()

      {

           alert(this.name+ ", " + this.password);

      }

      var s1 = newStudent();

      s1.getInfo();

E:// 5: 使用原型 + 建構函式定義對象(實現:屬性不共用,方法共用)

 function Person()

 {

      this.name = new Array();

      this.password ="123";// 定義的時候記得初始化

 }

 Person.prototype.getInfo = function()

 {

      alert(this.name +", " + this.password);  

 }

 var p1 = new Person();

 var p2 = new Person();

 p1.name.push("張三");

 p2.name.push("裡斯");

 p1.getInfo();

 p2.getInfo();

6、  對象的繼承inheritance

// javascript 繼承:1、對象冒充

      function Parent(name)

      {

           this.name =name;

           this.sayName =function()

           {   

               alert(this.name);

           }

      }

      function Sun(name,age)

      {

           this.method = Parent;// 此種方式在prototype定義的方法不能被繼承,不推薦使用

           this.method(name);

           delete this.method;

           this.age = age;

           this.sayAge =function()

           {

               alert(this.age);

           }

      }

 

      var p = new Parent("zhangsan");

      var s = new Sun("lisi", 20);

      p.sayName();

      s.sayName();

      s.sayAge();

第二種方式:// call 方法是Function 對象中的方法,因此我們定義的每一個函數都有call方法,call方法第一個參數會被傳遞給函數中的this,從第二個參數開始,會依次傳遞給函數(調用者)中的參數

 /** test call 的使用者

      function test(str1,str2)

      {

           alert(this.name+ ", " + str1 + ", " + str2)

      }

      var object = newObject();

      object.name ="zhangsan";

      object.arg1 = 30;

      test.call(object, "aa", 20);

          */

// 使用call實現inheritance

      function Daughter(name, gender)

      {

           Parent.call(this,name);

           this.gender =gender;

           this.getInfo =function()

           {

               alert(this.gender);

           }

      }

      //test code

      var d = new Daughter("Rose",27);

      d.sayName()

     d.getInfo();

第三種// 使用apply 實現 inheritance ,類似call

      functionDaughter2(name, gender)

      {

          Parent.apply(this, new Array(name,...));//[name],採用數組傳遞參數,而call采//用離散的方式

           this.gender =gender;

           this.getInfo =function()

           {

               alert(this.gender);

           }

      }

      var d2 = newDaughter2("Rose2", 37);

      d2.sayName()

     d2.getInfo();

第四種// 使用原型鏈 實現混合方式繼承 推薦

      function Parent2(name)

      {

           this.name =name;

      }

 

      Parent2.prototype.sayName= function()

      {

           alert(this.name);

      }

 

      function Sun2(name,age)

      {

           Parent2.call(this,name);// 實現屬性繼承

           this.age = age;

      }     

      Sun2.prototype = new Parent2(); // 繼承父物件的原型

      Sun2.prototype.sayAge= function()

      {

           alert(this.age);

      }

      // Test code

      var sun2 = newSun2("王二", 100);

      sun2.sayName();

     sun2.sayAge();

7、  Firebug技巧:

function showLog(msg)

{

console.log(msg);

console.info(msg);

console.warn(msg);

console.error(msg);

console.debug(msg);

}

 function test(name)

{

 showlog(name);

}

showlog(“test”);

8、   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.