對象
- 對象的創(chuàng)建方法
1.var obj = {} plainobject 對象字面量/對象直接量
2.構(gòu)造函數(shù)
1)系統(tǒng)自帶的構(gòu)造函數(shù) Object()
2)自定義
var obj = new object();執(zhí)行一次生產(chǎn)一個對象 而
且每次生產(chǎn)的對象都是一模一樣的 但是且相互獨
立的
var obj = {};與上面的表達式一樣 - 大駝峰命名規(guī)則 但凡是個單詞 首字母就得大寫
TheFirstName 小駝峰是就首字母不用大寫 剩下
都得大寫
function Car(color) {
this.color = color;
this.name = "BMW";
this.height = "1400";
this.lang = "4900";
this.weight = 1000;
this.health = 100;
this.run = function () {
this.health --;
}
}
var car = new Car('red');通過參數(shù)來改變函數(shù) 發(fā)
生自定義環(huán)節(jié)
var car1 = new Car('green');
car.name = "Maserati";
car1.name = " Merz";兩個name互不影響
function Student (name,age,sex){
//var this = {name : "" age:"" };
this.name = name;
this.age = age;
this.sex = sex;
this.grade = 2017;
//return this;
}
var student = new Student ('zhangsan', 18, 'male');
console.log(new Student ('zhangsan', 18, 'male').name);
- 構(gòu)造函數(shù)內(nèi)部原理
1.在函數(shù)體最前面隱式的加上this = {}
2.執(zhí)行 this.xxx = xxx;
3.隱式的返回this
只有存在new的情況下才會發(fā)生以上三步,否則就是正常函數(shù)執(zhí)行
//包裝類
var num = 4 ;
num.len = 3;
//new Number(4).len = 3; delete
//
//new Number(4).len
console.log(num.len);=>underfined
var str = "abcd";
str.length = 2;
//new String('abcd').length = 2; delete
//new String('abcd').length
console.log(str.length)=>4
原始值是不能操作屬性的 但是str本身就有l(wèi)ength這個屬性 而num沒有l(wèi)ength這個屬性
var str = "abc";
str += 1;
var test = typeof(str);//test == "string"
if(test.length == 6) {
test.sign = "typeof的返回結(jié)果可能為String“;
}//new String(test).sign = 'xxx';
//new String(test).sign
console.log(test.sign);=>underfined - 包裝類的一些問題
var str = "abc";
/new String('abc').length
console.log(str.length) ->3
正常來講原始值str是沒有屬性的,但是程序為了
不報錯,隱式的進行了一個操作,于是構(gòu)造了一個
字符串對象的構(gòu)造函數(shù)new String( ),然后將內(nèi)
容‘a(chǎn)bc’放在里面,把這個對象進行 . length操作,這
個過程就是包裝類(主要是原始值沒有屬性和方
法,但是生成得對象可以有屬性)
var num = 123;
num.abc = “abc”
/new Number(num).abc = 'abc'; ->delete(為了
不讓它報錯 執(zhí)行完就刪除了)
/兩個長得一樣,彼此獨立,上面那個已經(jīng)被銷毀
了,下面那個是重新建立得
/new Number(num).abc
console.log(num.abc) ->underfined