JS 物件導向之物件引用是什麼和它的問題

2021-08-18 01:51:35 字數 2102 閱讀 4796

function createperson(name, age, job) 

}var p1 =new createperson("贇贇", 16, "學生");

var p2 = new createperson("皎皎", 26, "秘書");

console.log(p1.showname == p2.showname ); //false

p2.showname();

p1.showname();

1、為何下面的結果是false?

console.log(p1.showname == p2.showname );
分析:這個關涉到js中的物件的引用:

var a = [1, 2, 3];

var b = [1, 2, 3];

console.log(a == b);//false

為了幫助理解,我們來看看基本型別:

var a = 5;

var b = a;

b += 3;

console.log(b); //8

console.log(a); //5

基本型別:var b = a;    //賦值的時候只是值的複製

接下來看看物件型別是什麼樣的:

var a = [1, 2, 3];

var b = a;

b.push(4);

console.log(b);//[1, 2, 3, 4]

console.log(a);//[1, 2, 3, 4]

物件型別:var b = a;            // 賦值不僅僅是值的複製,而且也是引用的傳遞(在記憶體上,相當於是把a居住的地方也給了b,a和b居住一起)

但是要注意:

var a = [1, 2, 3];

var b = a;

b = [1, 2, 3, 4];

console.log(b);//[1, 2, 3, 4]

console.log(a);//[1, 2, 3, ]

當程式執行到 b = [1, 2, 3, 4];這句賦值語句的時候,在記憶體的另為乙個位置上重新生成了乙個b的值,這個時候a和b已經分手沒有關係了,b從a的家裡搬離了出來了,既然a和b沒有關係了,那麼修改b的值,a自然不受到影響!

那麼對於比較,基本型別的比較是主要值相同則為true,但是引用型別的比較是要值和引用都要相同才能為true;

var a = [1, 2, 3];

var b = [1, 2, 3];

console.log(a == b); //false

a和b雖然值是相同,但是引用不同,依然為false;只有下面這樣,把值和引用一樣,才能為真,

var a = [1, 2, 3];

var b = a;

console.log(a == b);//true

那麼再回頭看:

function createperson(name, age, job) 

}var p1 =new createperson("贇贇", 16, "學生");

var p2 = new createperson("皎皎", 26, "秘書");

console.log(p1.showname == p2.showname ); //false

p2.showname();

p1.showname();

上面**,建立了兩個物件,這裡物件的位址是不同的,所以結果為false!

上面**的false與true對於我們寫程式有什麼影響呢?如果我們建立幾百幾萬個物件,那麼在程式中的showname方法在程式中是不是存在幾百份同樣的方法?這樣會極大消耗記憶體,就會造成記憶體的浪費?

如果console.log(p1.showname == p2.showname );為true的話,就是在記憶體中,值和引用都相同,在程式中只存在乙份,那麼怎麼樣可以讓這個為true呢?怎麼樣讓同樣的乙個方法在程式只存在乙份呢?這就關涉原型,下一節學習原型!

物件導向是什麼?為什麼要物件導向

一 物件導向,這個物件到底是什麼?這個物件不是c 中的例項,c 中我們把乙個類的例項也叫做物件,這種物件嚴格的說應該是物件導向的程式設計實現 oop 中的物件,物件導向程式設計,也不是面向類的例項程式設計。物件的定義是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作物件,它不僅能表示具...

物件導向的程式設計 物件是什麼?

與面向過程的語言 例如 c 不同的是,物件導向的語言裡面所關注的不再是具體的,瑣碎的過程,不再是對變數直接的運算,它所關注的是乙個個物件,是物件之間的互動。1 萬物皆物件,可以將現實世界中的任何乙個實體視為物件,而所有的具有某種特徵的物件統一為乙個類,類裡面定義了物件的域和操作。現實世界中並不存在類...

js物件是什麼?如何理解js物件

js中所有事物都是物件,例如 日期,字串,數字,陣列,布林,函式等。物件都有屬性和方法 比如車就就是乙個物件,車有顏色 重量等屬性 1.訪問物件屬性和方法 訪問物件 objectname.propertyname 訪問方法 objectname.mathodname 2.物件作用域 關鍵字this的...