工廠模式:
function createperson(name,age,job);o.name = name;
o.age = age;
o.job = job;
o.sayname = function();
return o;
} var tanya = createperson("tanya","30","female");
var ansel = createperson("ansel","30","male");
tanya.sayname();
ansel.sayname();
這裡先定義o為乙個空的物件,然後為o設定了一堆屬性。其實也可以直接給o屬性的嘛,所以如果這樣寫也是ok的。
function createperson(name,age,job)}; return o;
} var tanya = createperson("tanya","30","female");
var ansel = createperson("ansel","30","male");
tanya.sayname();
ansel.sayname();
還有一種辦法是利用無敵的this,因為this就表示當前執行時的物件,將建構函式this的作用域指向新物件,將當前執行物件的屬性和方法都賦給新物件,這樣物件模式稱為建構函式模式
function person(name,age,job);} var tanya = new person("tanya","30","female");
var ansel = new person("ansel","30","male");
tanya.sayname();
ansel.sayname();
在這個例子中,tanya和ansel都有乙個constructor屬性,該屬性指向person。
考慮一下如下的情況:
function person(name,age,job);} person("tanya","30","female");
person("ansel","30","male");
window.sayname();
window.sayname();
發現兩次彈出的都是ansel,這是因為不用new的話,就不是乙個person的例項,而僅僅在執行函式。而在全域性作用域呼叫乙個函式時this總是指向global物件。而global物件在瀏覽器中就是window物件。
function person(name,age,job);} var olivia = {};
person.call(olivia,"tanya","30","female");
olivia.sayname();
var philip = {}
philip.sayname();
原型模式就要考慮原型鏈了,分析一下,sayname方法在例項中被重複定義了兩次,但其實沒有必要創造兩個一樣的副本。使用原型方法,可以使是tanya和ansel的共享乙個sayname方法。
於是原型模式的寫法如下:
function person(name,age,job)person.prototype.sayname= function();
var tanya = new person("tanya","30","female");
var ansel = new person("ansel","30","male");
tanya.sayname();
ansel.sayname();
實際應用時,不是一成不變的套用某種模式,活學活用。需要共享方法的時候就用原型模式,需要使用副本的時候就用構造模式,還可以結合起來,把所有資訊都封裝在建構函式中,而通過在建構函式中初始化原型,使得物件保持了同時使用建構函式和原型的優點
function person(name,age,job);} }
var tanya = new person("tanya","30","female");
var ansel = new person("ansel","30","male");
ansel.sayname = function ()
tanya.sayname();
ansel.sayname();
JS物件導向程式設計 物件
一般面向過程的寫法都是寫很多function,壞處 1.復用不好 2.函式名稱容易重複衝突 下面介紹物件導向的寫法 在js中每個函式function都是乙個物件。比如,下面這個就是乙個物件,我們在使用的時候就可以當作物件來使用。function helloworld 使用下面測試函式 呼叫該函式就會...
js物件導向程式設計
js物件導向程式設計 js使用建構函式作為物件的模板 var vehicle function 生成物件例項 var v new vehicle v.price 1000 傳引數的建構函式 var vehicle function value var v new vehicle 500 protot...
js物件導向程式設計
1.直接建立物件 集中例項化問題 2.工廠模式 物件識別問題 3.建構函式模式 例項化物件的方法在每個例項上都要建立一遍 建構函式模式 function student name var student1 new student 張三 每個例項物件對應乙個引用,所以例項化物件時,所有屬性與方法都會重...