- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title></title>
- </head>
- <body>
- <script type="text/javascript">
- //1.創(chuàng)建Object,為其添加屬性方法
- var person = new Object();
- person.name = "Nicholas";
- person.age = 29;
- personal.job = "Software Engineer";
- personal.sayName = function () {
- alert(this.name);
- };
- /*
- 缺點(diǎn):使用一個(gè)接口創(chuàng)建很多對(duì)象,會(huì)產(chǎn)生大量重復(fù)代碼
- */
- //2.工廠(chǎng)模式
- function createPersonal(name, age, job) {
- var o = new Object();
- o.name = name;
- o.age = age;
- o.job = job;
- o.sayName = function () {
- alert(this.name);
- };
- return o;
- }
- /*
- 工廠(chǎng)模式解決了對(duì)象相似問(wèn)題,卻沒(méi)有解決對(duì)象識(shí)別問(wèn)題(怎樣知道一個(gè)對(duì)象的類(lèi)型)
- */
- //3.構(gòu)造函數(shù)模式
- function Person(name, age, job) {
- this.name = name;
- this.age = age;
- this.job = job;
- this.sayName = function () {
- alert(this.name);
- };
- }
- /*
- 構(gòu)造函數(shù)模式?jīng)]有顯式的創(chuàng)建對(duì)象,直接將方法和屬性賦給了this對(duì)象,沒(méi)有return語(yǔ)句
- 要?jiǎng)?chuàng)建Person的新實(shí)例,必須使用new操作符,實(shí)際經(jīng)歷4個(gè)步驟
- a.創(chuàng)建一個(gè)新對(duì)象
- b.將構(gòu)造函數(shù)的作用域賦給新對(duì)象(this指向這個(gè)新對(duì)象)
- c.執(zhí)行構(gòu)造函數(shù),為新對(duì)象添加屬性
- d.返回新對(duì)象
- 構(gòu)造函數(shù)模式創(chuàng)建的對(duì)象可以識(shí)別其類(lèi)型,但每個(gè)方法都要在每個(gè)實(shí)例上重建一遍
- */
- //創(chuàng)建兩個(gè)實(shí)例,創(chuàng)建兩個(gè)相同的方法沒(méi)必要,可以把函數(shù)定義轉(zhuǎn)到方法外部
- function Person(name, age, job) {
- this.name = name;
- this.age = age;
- this.job = job;
- this.sayName = sayName;
- }
- function sayName() {
- alert(this.name);
- }
- /*
- 這樣解決了兩個(gè)方法做同一件事的的問(wèn)題,但在全局作用域上定義的函數(shù)只能被某個(gè)對(duì)象調(diào)用,如果對(duì)象定義需要很多方,就要定義很多全局函數(shù),自定義的引用類(lèi)型就沒(méi)有封裝 性了
- */
- //4.原型模式
- function Person() {
- }
- Person.prototype.name = "Nocholas";
- Person.prototype.age = 29;
- Person.prototype.job = "Software Engineer";
- Person.prototype.sayName = function () {
- alert(this.name);
- }
- /*
- 原型模式所有參數(shù)默認(rèn)取得相同的值,屬性若為引用類(lèi)型,多個(gè)實(shí)例之間互相影響
- */
- //5.構(gòu)造函數(shù)原型混合模式
- function Person(name, age, job) {
- this.name = name;
- this.age = age;
- this.job = job;
- }
- Person.prototype.sayName = function () {
- alert(this.name);
- }
- /*
- 構(gòu)造函數(shù)用于定義實(shí)例屬性,原型用于定義方法和共享屬性,。eigenvalue實(shí)例都會(huì)有一份自己實(shí)例屬性的副本,同時(shí)享用著對(duì)共享方法的引用
- */
- </script>
- </body>
- </html>
聯(lián)系客服