<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h2>面向對象</h2> <pre> 一切皆爲對象 對象是類的一個實例,對象有屬性和方法,對象表示屬性的無序集合 聲明對象 var person = { name: "張三", age: 20 } 2.構造函數建立對象 用來建立對象的函數 與普通函數的區別: 首字母大寫 裏面的this所指的是實例對象 沒有return語句,直接返回對象 調用構造函數時,new會自動建立this對象,且類型就是構造函數類型 對象有一個constructor屬性,指向他的構造函數 3.prototype原型模式 javascript裏面,每個構造函數都有一個prototype屬性,指向另外一個對象,這個對象的全部屬性和方法都會被構造函數的實例繼承 因此,咱們能夠把那些不變的屬性和方法定義在prototype對象上。 輔助方法: isPrototypeOf() 判斷對象是否繼承了構造函數的prototype屬性 hasOwnProperty() 用來判斷某一個屬性是本身的屬性仍是prototype的屬性 若是是本身的,則返回true 若是是繼承prototype的,則返回false delete 刪除屬性 in 用來判斷某個實例是否含有某個屬性 還能夠遍歷某個對象的屬性 </pre> <script> var person = { name: "張三", age: 20, show: function(){ alert(this.name) } } person.height = "180"; // person.show(); // alert(person.height); //alert(person.name) //經過構造函數來建立對象 function Person(name,age){ this.name = name; this.age = age; //this.type = "人類"; } Person.prototype.type = "人類"; Person.prototype.sayHi = function(){ alert("hello!"); } var p1 = new Person("張三", 20); p1.type = "黃種人"; var p2 = new Person("李四", 23); //alert(p1.constructor == p2.constructor); //alert(p1.type) //黃種人 //console.log(p1) // p1.sayHi(); // p2.sayHi(); //alert(Person.prototype.isPrototypeOf(p1));//true //alert(p2.hasOwnProperty("type")); // delete p1.type; // alert(p1.type); //人類 // alert("type" in p1); //true for(var k in p1){ console.log(k+":" + p1[k]) } // 輸出 /*name:張三 age:20 type:人類 sayHi:function (){ alert("hello!"); }*/ </script> </body> </html>