国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript中的對象和原型(二)

2019-11-20 09:15:10
字體:
供稿:網(wǎng)友

在上篇文章中JavaScript中的對象和原型(一)提到了JavaScript中對象的創(chuàng)建的一些基本操作,接下來討論下繼續(xù)討論。

  一 工廠模式

  我們知道,要創(chuàng)建一個對象我們可以用如下代碼:

var user = new Object(); //使用new運算符創(chuàng)建一個對象user.name = '念在三角湖畔'; //給對象添加屬性user.age = 22;user.address = '湖北武漢';alert(user.name + " " +user.age);//返回 '念在三角湖畔 湖北武漢' 

  用這樣的方法創(chuàng)建對象比較簡單直觀,也是JavaScript種創(chuàng)建對象最基本的方法。但是這樣就有一個問題,如果我們需要創(chuàng)建多個對象,那么我就得寫很多重復(fù)的代碼。比如我們想創(chuàng)建另一個對象user1,我們就得重新將上面的代碼重新寫一遍,這在實際開發(fā)過程中是不合適的,這樣如果對象過多,代碼量將大大增加。

  為了解決這樣的問題,我們可以使用一種叫做工廠模式的方法,這種方法 就是為了解決實例化對象產(chǎn)生大量重復(fù)代碼的問題。

function create(name, age) {  var obj = new Object();   obj.name = name;   obj.age = age;  obj.run = function () {    return this.name +' '+ this.age;  };  return obj;}var obj1= create('ZXC', 10); //第一個實例var obj2= create('CXZ', 20); //第二個實例alert(obj1.run());alert(obj1.run()); 

 從上面的代碼我們可以看出,工廠模式解決了實例化時代碼大量重復(fù)的問題,但又出現(xiàn)了一個問題,那就是識別問題,我們根本無法弄清楚他們到底是哪個對象的實例。比如

alert(typeof obj1); //Objectalert(obj1 instanceof Object); //true 

  以上代碼標明box1是Object對象,但是我們無法知道具體是哪一個對象創(chuàng)建的。

  二 構(gòu)造函數(shù)(構(gòu)造方法)

  為了解決上面的問題,我們可以用構(gòu)造方法去創(chuàng)建對象。構(gòu)造函數(shù)和普通函數(shù)的唯一區(qū)別,就是調(diào)用的方式不同。但是,構(gòu)造函數(shù)同樣是函 數(shù)。

function User(name, age) { //構(gòu)造函數(shù)模式  this.name = name;  this.age = age;  this.run = function () {    return this.name + ' '+this.age;   };}

  創(chuàng)建對象的時候用new運算符就可以了:

var user1= new User('ZXC', 25);var user2= new User('CXZ', 22); 

  現(xiàn)在我們就可以檢測user1或者user2是不是屬于User。

alert(user1 instanceof User);//true 

  可見,使用構(gòu)造函數(shù)的方法,即解決了重復(fù)實例化的問題,又解決了對象識別的問題。

  使用構(gòu)造函數(shù)時執(zhí)行的過程如下:

  1.執(zhí)行 new 構(gòu)造函數(shù)()時,后臺執(zhí)行了 new Object();

  2.將構(gòu)造函數(shù)的作用域給新對象。

  3.執(zhí)行構(gòu)造函數(shù)內(nèi)的代碼;

  4.后臺直接返回新對象。

  接下來我們看看構(gòu)造函數(shù)內(nèi)部的函數(shù)問題。如果我們執(zhí)行以下語句:

alert(user1.run==user2.run);//結(jié)果返回的是false 

  結(jié)果返回的是false,這就說明方法其實也是一種引用地址。如果我們同樣重復(fù)創(chuàng)建了多個對象,那么每個對象中的方法都會在內(nèi)存中開辟新的空間,這樣浪費的空間就比較多。要解決這個問題,我們就需要用到實例屬性或者方法的共享,下一篇文章中將繼續(xù)探討解決這個問題。

以上所述是小編給大家介紹的Javascript中的對象和原型(二),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 芒康县| 通海县| 南安市| 天等县| 松滋市| 鹤峰县| 哈尔滨市| 梅河口市| 陈巴尔虎旗| 曲麻莱县| 中西区| 容城县| 莱西市| 林甸县| 平昌县| 双桥区| 遵义县| 沙雅县| 巫溪县| 海阳市| 内丘县| 黔江区| 华阴市| 齐齐哈尔市| 新和县| 木兰县| 松原市| 德清县| 西平县| 昭苏县| 峨边| 元江| 宜宾县| 竹山县| 顺平县| 颍上县| 南召县| 双柏县| 融水| 丹寨县| 赞皇县|