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的...