前言
一下仅个人的理解。还是特别前调一下,因为内容中涉及大量我以为别人的想法,但或许是我人傻理解成了别人是那么种想法
关于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); //