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

首頁 > 編程 > JavaScript > 正文

Javascript面象對(duì)象成員、共享成員變量實(shí)驗(yàn)

2019-11-21 00:06:13
字體:
供稿:網(wǎng)友
1)Javascript對(duì)象成員實(shí)驗(yàn):
復(fù)制代碼 代碼如下:

var f = function d() {
this.a = "a";/*這句運(yùn)行后不存在f.a也不存在d.a存在一個(gè)window.a*/
var b = "b";/*局部變量*/
};
var o = { ff: function () {
var a = "a"; /*局部變量*/
this.b = "b"; /*這句運(yùn)行后存在o.b*/
}
};
function Man(){
this.age = 30;
};
Man.prototype.sex = 1;
Man.prototype.name = function () {
};
debugger;/*第一處斷點(diǎn)*/
f();
o.ff();
var m = new Man();
debugger; /*第二處斷點(diǎn)*/

第一處斷點(diǎn)時(shí)對(duì)象成員的存在情況:

第二處斷點(diǎn)時(shí)對(duì)象成員的存在情況:

一句話:關(guān)于js函數(shù):this指的是所在函數(shù)外最近一層的對(duì)象,而嵌套函數(shù)的內(nèi)部函數(shù)內(nèi)的this指的是window對(duì)象。

一句話:js的oo特性:使用this.成員方式定義對(duì)象的成員使用對(duì)象具有js特有的動(dòng)態(tài)持性,類與對(duì)象實(shí)例有差異的,而.prototype.成員定義成員是經(jīng)典的定義方式,類與對(duì)象實(shí)例是統(tǒng)一的。
2)Javascript對(duì)象共享性成員變量實(shí)驗(yàn):

復(fù)制代碼 代碼如下:

function Ghost(_name) {
this.name = _name;
this.age = 1000;
}
Ghost.prototype.setName = function (_name) {
this.name = _name;
}
function Man(_name){
this.age = 30;
this.ghost = new Ghost("實(shí)例變量" + _name);
};
Man.prototype.ManGhost = new Ghost("共享變量");
var a = new Man("a");
var b = new Man("b");
var amg = a.ManGhost.setName("我只設(shè)置a的共享變量");
debugger; /*第一處斷點(diǎn)*/
var ag = a.ghost;
var bg = b.ghost;
var bmg = b.ManGhost;
debugger; /*第二處斷點(diǎn)*/

運(yùn)行到第一片斷點(diǎn):

簡(jiǎn)單變量與對(duì)象變量的差別

使用.prototype.定義的成員,如果該成員為簡(jiǎn)單變量則,每個(gè)對(duì)象實(shí)例都有一個(gè)各自的副本。(例如:Man.prototype.noObejctVar)

使用.prototype.定義的成員,如果該成員對(duì)象變量,則每個(gè)對(duì)象實(shí)例都共享同一個(gè)對(duì)象副本。(例如:Man.prototype.ManGhost)

為什么有這樣的差別呢?單從ManGhost變量與noObjectVar變量它們都是使用.prototype.定義的成員是沒有差別的,只是它們類型不同,表示它們?cè)L問和使用用它們的方式是不同的,只是ManGhost變量?jī)?nèi)存放的是new出來的對(duì)象,而noObjectVar變量?jī)?nèi)存放的是值(或某種值的引用),換句話說ManGhost存放的是對(duì)象的引用,通過這個(gè)引用可以操作這個(gè)對(duì)象,noObjectVar變量?jī)?nèi)存放也可是某種值引用,可是無法使用這個(gè)引用來操作它.

從另一個(gè)視角看

noObjectVar變量存放的是字串對(duì)象的引用.

a.noObjectVar="新字符串a(chǎn)";

這表示noObjectVar從原來的存放字符串對(duì)象引用,指向新字符串對(duì)象引用.(也可以說新的字符串對(duì)象覆蓋原字符串對(duì)象)

a.ManGhost=new Ghost("a");

b.ManGhost=new Ghost("b");

這樣a與b就不存在共享對(duì)象的問題了.不過這樣就存在另一個(gè)問題.prototype.ManGhost時(shí)定義新建的對(duì)象就浪費(fèi)了.不過這樣使用.prototype.是錯(cuò)誤的.

使用.prototype.定義成員函數(shù)及定義共享變量才是正確的用法.

使用javascript來正確的定義類請(qǐng)見:[技術(shù)備忘錄]javascript來定義類的規(guī)范

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长宁县| 旬阳县| 辽宁省| 班戈县| 基隆市| 永昌县| 庆元县| 宜兴市| 平邑县| 年辖:市辖区| 称多县| 白山市| 成武县| 海门市| 秦皇岛市| 桦川县| 木兰县| 孟村| 南宁市| 友谊县| 开平市| 合水县| 盘锦市| 清远市| 嘉峪关市| 绥化市| 巴彦县| 汾西县| 东至县| 临猗县| 阿克| 昔阳县| 浮梁县| 利辛县| 昭通市| 广饶县| 梁平县| 武安市| 台前县| 克什克腾旗| 兴义市|