亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

舉例說明JavaScript中的實例對象與原型對象

2019-11-20 10:23:55
字體:
來源:轉載
供稿:網友

首先聲明:javascript中每個對象都有一個constructor屬性和一個prototype屬性。constructor指向對象的構造函數,prototype指向使用構造函數創建的對象實例的原型對象。

function Person(){    } var person = new Person();  Person.prototype = {  constructor : Person,  name : 'zxs',  age : 24,  sayName : function(){alert(this.name)}  }   person.sayName(); 

在這段代碼中會報錯,sayName() is not defined。根據javascript高級程序設計第二版的解釋,是因為重寫的原型切斷了構造函數與最初原型之間的聯系。但是我們調整一下上面語句的順序。如下:

function Person(){  } //var person = new Person(); Person.prototype = {  constructor : Person,  name : 'zxs',  age : 24,  sayName : function(){alert(this.name)} } /*===========================================================*/ var person = new Person(); /*===========================================================*/  person.sayName(); // zxs alert(person.constructor) //function Object() { [native code]} or function Person() {} 取決與藍色的語句是否有效 

注意上面兩段代碼等號中間的語句。按第二段的順序寫代碼,將會輸出 ”zxs“,這個結果說明在第一種情況下報錯并不能說明是因為切斷了構造函數與原想之間的聯系引起的。

Person.prototype = {} 

本來就是一種定義對象的方法,而且在javascript中每個對象的constructor屬性都默認的指向Object構造函數,這也就不難說明重寫原型對象確實切斷了構造函數與最初原型之間的聯系,但并不能說明這種聯系被切斷之后 person就不能訪問到sayName()函數。

現在有這樣的假設:函數的prototype屬性所指向的原型對象,與我們顯示新建的原型對象并不是完全等同的。當我們調用函數的時候會創建一個原型對象,此時會首先查找當前環境中是否存在其原型對象,如果程序中不存在,就創建一個,如果環境中存在,側查找他們的屬性和方法,最后根據查找的結果返回一個原型對象,這個對象中的屬性和方法總是優先使用默認原型中的屬性和方法,也就是構造函數中定義的屬性和方法。當當調用的方法或屬性不存在于默認的原型中時,才使用定義在Person.prototype = {} 的屬性和方法。

javascript是解釋性的語言,語句都是順序執行的,在第一段代碼中,當我們使用 new 關鍵字創建新對象的時候,Person.prototype = {} 并沒有執行,也就是說在當前的執行環境中找不到其中定義的方法和屬性,而構造函數中沒有該方法,所以出錯。就像一個變量,給他賦值的時候程序沒有執行將不能使用。在第二段中環境中已經存在該調用的方法,構造函數的原型對象已經創建完畢,所以可以得到結果。

再看下面的一段程序:

//////////////////////////////////////////////////////////////////////////  function Person(){}  /*===========================================================*/   var person = new Person(); Person.prototype.name = 'song';  /*===========================================================*/  //Person.prototype.sayName = function(){alert(this.name)}; Person.prototype = { constructor : Person, name : 'zxs', age : 24, sayName : function(){alert(this.name)} } person.sayName(); // error  //////////////////////////////////////////////////////////////////////////  function Person(){  } /*var person = new Person();*/ Person.prototype.name = 'song';  /*Person.prototype.sayName = function(){alert(this.name)};*/ Person.prototype = {   constructor : Person,   name : 'zxs',   age : 24,   sayName : function(){alert(this.name)} }  /*===========================================================*/ var person = new Person();  /*===========================================================*/ person.sayName(); // zxs 

從這里可以看出使用 Person.prototype.name = '',的方式不論在什么地方創建對象都能被訪問,如果同時存在對象字面量和這種方法定義原型對象,將使用后定義的作為最終值。并且對原型對象使用對象字面量定義之后,該定義必須出現在創建對象的語句之前才能被訪問到。

實例不能訪問到原型對象中的屬性和方法,不僅僅是因為重寫原型對象切斷了構造函數與最初原型之間的聯系。

function Person(){        }  var person = new Person();    Person.prototype = {    //constructor : Person,    name : 'zxs',    age : 24,    sayName : function(){alert(this.name)}    }      person.sayName();  

以上代碼在實例化對象時構造函數的原型為空,它沒有任何除默認屬性以外的屬性。重寫構造函數的原型確實切斷了構造函數與最初原型之間的聯系。

在使用 new 操作符以后構造函數的原型對象中的屬性和方法已經添加到 person對象中。因為以上方法為函數原型添加新屬性和方法不具有動態性,所以person不能訪問到新添加的屬性和方法。

重寫原型對象之后,就如同如下代碼:

var o = {   name : 'zxs'   }    var obj = o; o = {} console.log(o.name);  

此時輸出的值是undefined,因為,對象是一個引用類型,“=”是賦值操作符,并且其運算順序是從右往左。o={}就是說o的指向已經改變,是一個空對象。
Person.prototype.mothed = function() {}與Person.prototype={mothed:function(){}}的區別就如同 arr = []和arr.push()一樣,前者都是修改自身,后者是完全改變自身。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
激情av一区二区| 久久伊人精品视频| 欧美黄色小视频| 国产精品情侣自拍| 亚洲欧美中文字幕| 国产成人精品在线视频| 国产成人精品在线| 欧美香蕉大胸在线视频观看| 国产精品久久久久免费a∨| 亚洲欧美日韩中文在线| 国产女精品视频网站免费| 亚洲国产一区二区三区四区| 欧美日韩国产一区在线| 亚洲精品久久在线| 欧美肥臀大乳一区二区免费视频| 久久最新资源网| 亚洲国产精品成人va在线观看| 韩国三级日本三级少妇99| 亚洲成人精品视频| 国产欧美在线视频| 性欧美xxxx视频在线观看| 日韩精品视频观看| 日韩美女主播视频| 国产91精品久久久| 日韩精品福利网站| 久久精品成人欧美大片古装| 97精品免费视频| 91九色精品视频| 色妞久久福利网| 久久精品国产欧美亚洲人人爽| 这里只有精品在线观看| 欧美电影电视剧在线观看| 国产99视频精品免视看7| 国产日韩欧美综合| 亚洲精品自拍视频| 91日本视频在线| 亚洲国产天堂久久综合网| 91精品国产91久久久| 成人在线一区二区| 国产亚洲欧洲高清| 色哟哟入口国产精品| 国产一区二区色| 亚洲国产日韩欧美在线99| 欧美亚洲激情在线| 国产丝袜一区二区三区免费视频| 亚洲视频网站在线观看| 成人欧美一区二区三区在线湿哒哒| 欧美日韩在线观看视频小说| 欧美高清性猛交| 亚洲性av网站| 亚洲国产精品va| 欧美老女人性视频| 国产成人精品综合| 亚洲色图综合久久| 精品小视频在线| 亚洲欧美精品在线| 91精品免费久久久久久久久| 亚洲色图五月天| 日韩av大片免费看| 欧美风情在线观看| 亚洲欧美在线看| 国产精品日韩在线观看| 91欧美激情另类亚洲| 欧美电影免费观看高清完整| 欧美成人午夜剧场免费观看| 97精品国产97久久久久久| 国产精品久久久久久av下载红粉| 国产精品成人一区二区| 92福利视频午夜1000合集在线观看| 国产v综合v亚洲欧美久久| 日韩精品久久久久久久玫瑰园| 91精品国产自产在线老师啪| 91香蕉亚洲精品| 欧美野外猛男的大粗鳮| 国产精品久久久久久久av大片| 日韩福利在线播放| 精品久久久久久国产| 国产精品一区二区久久国产| 中文字幕日韩av综合精品| 国产精品免费久久久久影院| 欧美电影免费观看网站| 精品自拍视频在线观看| 国产精品国产亚洲伊人久久| 国产在线视频一区| 精品国产电影一区| 国产精品久久久久999| 97视频网站入口| 欧美极品美女电影一区| 98视频在线噜噜噜国产| 日韩精品高清在线观看| 国产精品日本精品| 国产日韩欧美日韩| 国产精品老牛影院在线观看| 国产999精品视频| 欧美小视频在线观看| 亚洲性生活视频在线观看| 亚洲欧美日韩成人| 国产精品久久久久77777| 91精品国产综合久久香蕉的用户体验| 欧美国产精品va在线观看| 日韩av成人在线观看| 国产欧美日韩91| 91免费人成网站在线观看18| 萌白酱国产一区二区| 国模精品一区二区三区色天香| 91高潮在线观看| 成人黄色大片在线免费观看| 高潮白浆女日韩av免费看| 国产成人精品免费久久久久| 精品动漫一区二区三区| 精品国产电影一区| 97在线视频一区| 搡老女人一区二区三区视频tv| 91国产视频在线| 69影院欧美专区视频| 国产日韩视频在线观看| 亚洲天堂一区二区三区| 久久久久久久久久久免费| 久久精品影视伊人网| 性欧美暴力猛交69hd| 韩国福利视频一区| 欧美精品日韩www.p站| 欧美激情一区二区三区高清视频| 日本一区二区三区在线播放| 久久伊人精品一区二区三区| 国模精品一区二区三区色天香| 精品国偷自产在线| 精品一区二区亚洲| 久久久在线免费观看| 欧美国产日韩精品| 欧美一级bbbbb性bbbb喷潮片| 成人妇女免费播放久久久| 国产国语videosex另类| 亚洲精品久久久久中文字幕二区| 久久国产精品视频| 亚洲第一免费网站| 原创国产精品91| 精品国偷自产在线视频99| 亚洲欧美一区二区三区久久| 亚洲奶大毛多的老太婆| 成人免费淫片视频软件| 日韩电影中文字幕在线| 欧美激情视频网址| 91九色蝌蚪国产| 国产精品永久免费观看| 亚洲国产精品久久久久久| 久久香蕉精品香蕉| 欧美精品videofree1080p| 另类视频在线观看| 国产成人精品在线观看| 久久久久亚洲精品国产| 国产成人拍精品视频午夜网站| 色爱精品视频一区| 欧美另类xxx| 国产精品日韩久久久久| 欧美体内谢she精2性欧美| 91高清视频免费观看| 亚洲欧美日韩中文在线| 热99精品只有里视频精品| 欧洲成人在线视频| 国产精品女人久久久久久| 亚洲精品自拍偷拍| 亚洲欧美综合另类中字| 亚洲色图av在线|