面向對象的三大基本特性
封裝(把相關的信息(無論數據或方法)存儲在對象中的能力)
繼承(由另一個類(或多個類)得來類的屬性和方法的能力)
多態(一個對象在不同情況下的多種形態)
定義類或對象
第一種:基于Object對象
var person = new Object();person.name = "Rose";person.age = 18;person.getName = function () { return this.name;};console.log(person.name);//Roseconsole.log(person.getName);//function () {return this.name;}console.log(person.getName());//Rose 缺點:不能創建多個對象。
第二種:基于字面量方式
var person = { name : "Rose", age : 18 , getName : function () { return this.name; }};console.log(person.name);//Roseconsole.log(person.getName);//function () {return this.name;}console.log(person.getName());//Rose優點:比較清楚的查找對象包含的屬性和方法;
缺點:不能創建多個對象。
第三種:工廠模式
方式一:
function createPerson(name,age) { var object = new Object(); object.name = name; object.age = age; object.getName = function () { return this.name; }; return object;}var person1 = createPerson("Rose",18);var person2 = createPerson("Jack",20);console.log(person1.name);//Roseconsole.log(person2.name);//Jackconsole.log(person1.getName === person2.getName);//false//重復生成函數,為每個對象都創建獨立的函數版本 優點:可以創建多個對象;
缺點:重復生成函數getName(),為每個對象都創建獨立的函數版本。
方式二:
function createPerson(name,age) { var object = new Object(); object.name = name; object.age = age; object.getName = getName; return object;}function getName() { return this.name;}var person1 = createPerson("Rose",18);var person2 = createPerson("Jack",20);console.log(person1.name);//Roseconsole.log(person2.name);//Jackconsole.log(person1.getName === person2.getName);//true//共享同一個函數優點:可以創建多個對象;
缺點:從語義上講,函數getName()不太像是Person對象的方法,辨識度不高。
第四種:構造函數方式
方式一:
function Person(name,age) { this.name = name; this.age = age; this.getName = function () { return this.name; }}var person1 = new Person("Rose",18);var person2 = new Person("Jack",20);console.log(person1.name);//Roseconsole.log(person2.name);//Jackconsole.log(person1.getName === person2.getName); //false//重復生成函數,為每個對象都創建獨立的函數版本優點:可以創建多個對象;
缺點:重復生成函數getName(),為每個對象都創建獨立的函數版本。
方式二:
function Person(name,age) { this.name = name; this.age = age; this.getName = getName ;}function getName() { return this.name;}var person1 = new Person("Rose",18);var person2 = new Person("Jack",20);console.log(person1.name);//Roseconsole.log(person2.name);//Jackconsole.log(person1.getName === person2.getName); //true//共享同一個函數
新聞熱點
疑難解答
圖片精選