- <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);
- };
- /*
- 缺點:使用一個接口創(chuàng)建很多對象,會產生大量重復代碼
- */
- //2.工廠模式
- 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;
- }
- /*
- 工廠模式解決了對象相似問題,卻沒有解決對象識別問題(怎樣知道一個對象的類型)
- */
- //3.構造函數(shù)模式
- function Person(name, age, job) {
- this.name = name;
- this.age = age;
- this.job = job;
- this.sayName = function () {
- alert(this.name);
- };
- }
- /*
- 構造函數(shù)模式沒有顯式的創(chuàng)建對象,直接將方法和屬性賦給了this對象,沒有return語句
- 要創(chuàng)建Person的新實例,必須使用new操作符,實際經歷4個步驟
- a.創(chuàng)建一個新對象
- b.將構造函數(shù)的作用域賦給新對象(this指向這個新對象)
- c.執(zhí)行構造函數(shù),為新對象添加屬性
- d.返回新對象
- 構造函數(shù)模式創(chuàng)建的對象可以識別其類型,但每個方法都要在每個實例上重建一遍
- */
- //創(chuàng)建兩個實例,創(chuàng)建兩個相同的方法沒必要,可以把函數(shù)定義轉到方法外部
- function Person(name, age, job) {
- this.name = name;
- this.age = age;
- this.job = job;
- this.sayName = sayName;
- }
- function sayName() {
- alert(this.name);
- }
- /*
- 這樣解決了兩個方法做同一件事的的問題,但在全局作用域上定義的函數(shù)只能被某個對象調用,如果對象定義需要很多方,就要定義很多全局函數(shù),自定義的引用類型就沒有封裝 性了
- */
- //4.原型模式
- function Person() {
- }
- Person.prototype.name = "Nocholas";
- Person.prototype.age = 29;
- Person.prototype.job = "Software Engineer";
- Person.prototype.sayName = function () {
- alert(this.name);
- }
- /*
- 原型模式所有參數(shù)默認取得相同的值,屬性若為引用類型,多個實例之間互相影響
- */
- //5.構造函數(shù)原型混合模式
- function Person(name, age, job) {
- this.name = name;
- this.age = age;
- this.job = job;
- }
- Person.prototype.sayName = function () {
- alert(this.name);
- }
- /*
- 構造函數(shù)用于定義實例屬性,原型用于定義方法和共享屬性,。eigenvalue實例都會有一份自己實例屬性的副本,同時享用著對共享方法的引用
- */
- </script>
- </body>
- </html>