對象
對象的創(chuàng)建方法
1普办,(plainObject )對象字面量 | | 對象直接量,var obj={ },
var mrWang = {
name: ' wang',
age: 40,
sex: 'male',
health: 100,
energy: 100,
drink: function() {
console.log('I am drinking');
this.health--; //控制臺打印只有返回值才有結(jié)果 沒有返回值就是underfined
},
run: function() {
console.log('I am runing');
this.energy--; //控制臺打印只有返回值才有結(jié)果 沒有返回值就是underfined
}
};
對象的增
mrWang.wife = '劉美女'; //對象的屬性值字符串最好要用''表示族跛,為了和后端更好配合
對象的刪
delete mrWang.age
console.log(mrWang.age) //undefine d 知識點:未聲明的變量使用時 會報錯 宽档。
//訪問對象的未設(shè)置的屬性 結(jié)果是undefined烫罩。
2,構(gòu)造函數(shù)
1)系統(tǒng)自帶的構(gòu)造函數(shù)
Object()务冕。new object()結(jié)果就是一個對象书释,用一個變量去接受翘贮,就能為一個對象 var obj=new Object()。Object相當(dāng)于工廠爆惧,每次創(chuàng)建的新對象都是獨一無二且獨立的狸页。
2)自定義
大駝峰(例如:TheFirstName,小駝峰:theFirstname) 和普通函數(shù)不一樣就是命名不同扯再。
構(gòu)造函數(shù)內(nèi)部原理:三部曲:1芍耘,在函數(shù)體最前面隱式的加上this={}2,執(zhí)行this.XXX=XXX熄阻。3斋竞,隱式的返回this。
function Student(name, height) {
// 1,var this={ }
this.name = name;
this.height = height;
this.energy = 100;
this.run = function() {
this.energy--;
};
// 2,執(zhí)行this.xxx=xxx;
// 若在隱式執(zhí)行前 顯示的返回{}秃殉,this.run的下面添加 return {}坝初,那var person=new Student的結(jié)果是 person={}浸剩。
// 如果隱式執(zhí)行前,添加的是 return 123,var person=new Student正常執(zhí)行鳄袍。原始值不影響結(jié)果绢要。
}
包裝類:String();Boolean();Number();
var num = new Number(123);
var str = new String('abc');
var bol = new Boolean('true');
原始值是不能有屬性和方法的 ,經(jīng)過包裝類后才能有屬性和方法拗小。如以下案例的解析(數(shù)字):
var num = 6;
num.len = 2;
// 隱士執(zhí)行 new Number(6).len=3; delete 重罪。
console.log(num.len); //undefined
// 重新為num添加屬性,不會報錯哀九,但是這個屬性沒有值 因此結(jié)果是undefined剿配。
num是原始值沒有屬性和方法的 ,為其添加屬性和方法時不會報錯阅束,但惨篱,新建數(shù)字對象,隱式將其包裝后添加屬性 最后刪除围俘。刪除完后num.len就不存在 無法訪問了。
再有如下案例(字符串):
var str = 'abcd';
str.length = 2; //new String('abcd').length=2; delete 因此不會報錯
console.log(str.length); //4.
//new String('abcd').length.對象字符串有l(wèi)ength屬性琢融,
var str = 'abc';
str += 1; //'abc1'
var test = typeof(str); //typeof(str)='string',test='string'
if (test.length == 6) {
test.sign = "typeof的返回結(jié)果可能為String";
// new String('string').sign=xxx; delete
}
console.log(test.sign); // 結(jié)果是 undefined
// 重新 new String('string').sign 界牡。但是沒有值