前言
一下僅個人的理解。還是特別前調一下,因爲內容中涉及大量我以爲別人的想法,但或許是我人傻理解成了別人是那麼種想法
關於Object,簡單的理解可以解釋爲封裝對象,擁有屬性和方法。比如對象:貓,屬性:體重,方法:喫;
那麼js如何定義對象兩者如何又有何區別;
那麼由淺入深的來說說:
一般情況下定義一個對象;
var cat = {
"weight" : "10",
"eat" : function(v){
return console.log("貓喫"+v);
}
}
很多人簡單的告訴別人屬性即值,方法一般用函數的形式,可以封裝賦值封裝行爲。
但是我想問一個問題。上述代碼中寫出cat的屬性;
我也試着在各個羣裏問了一下。然後估計被當白癡無視了。
上代碼
var ceshi = new Object;
var v;
Object.defineProperty(ceshi, "_a", {//定義對象屬性_a
get: function () {
return v;
},
set: function (value) {
v = value;
}
});
Object.defineProperty(ceshi, "b", {//定義對象方法b,給_a賦值
value: function(v) {
this._a = v;
return this;
}
});
測試結果
//給_a賦值
ceshi._a = "11";
console.log(ceshi._a);//11
//通過調用方法b給_a賦值
ceshi.b("22");
console.log(ceshi.b); //function(v) {
// this._a = v;
// return this;
// }
console.log(ceshi._a); //22
//當出現語法錯誤時,結果如何
ceshi.b = "33";
console.log(ceshi.b); //function(v) {
// this._a = v;
// return this;
// } ceshi.b並沒有被重置
console.log(ceshi._a); //22;依舊是22
意義何在
常規寫法
ceshi._a = function (value) {
return value;
}
ceshi.b = function (value) {
this._a = value;
return this;
}
結果
//給_a賦值
ceshi._a = "11";
console.log(ceshi._a);//11
//通過調用方法b給_a賦值
ceshi.b = "33";
console.log(ceshi.b); //33 ___方法被重寫
console.log(ceshi._a); //11
//當出現語法錯誤時,結果如何
ceshi.b("22");
console.log(ceshi.b); //Uncaught TypeError: ceshi.b is not a function
console.log(ceshi._a); //