對(duì)象、包裝類

對(duì)象

1、用已學(xué)的知識(shí)來描述一下對(duì)象:

var mrDeng = {
    name : "mrDeng",
    age: 40,
    sex : "male",
    health: 100,
    smoke: function () {
        console.log('I am smoking ! cool!!!!')
        mrDeng.health --;   //對(duì)象.方法
        //屬性值是函數(shù)的話,稱這個(gè)值為方法。
    }
}

2、屬性的增、刪、改、查

//增
mrDeng.wife = "xiaoliu";     //對(duì)象.屬性 = 屬性值
//刪
deleten mrDeng.sex
//改
mrDeng.sex = famale;
//查
mrDeng.age

對(duì)象的屬性,沒定義就訪問時(shí)不會(huì)報(bào)錯(cuò),會(huì)返回undefiend。

3、對(duì)象的創(chuàng)建方法
字面量

//var obj = {}    plainOblect    對(duì)象字面量/對(duì)象直接量

構(gòu)造函數(shù)

  • 系統(tǒng)自帶 new Object();Array();Number();Booleam();String();Date();
var obj = new Object();
var obj = {};    //這兩個(gè)沒有任何區(qū)別

var obj = new Object();
obj.name = 'abc';
obj.sex = 'male';    //添加屬性

//構(gòu)造函數(shù)寫法和真正的函數(shù)沒有什么區(qū)別。
//構(gòu)造函數(shù)的免名稱盡量使用**大駝峰式命名規(guī)則**

  • 自定義
function Car(){
    this.name = 'BMW';
    this.height = '1400';
    this.lang= '4900';
    this.weight= '1000';
    this.health= '100';
    this.run= function(){
        this.health --;
    };
}

var car  = new Car();
var car1 = new Car();
  • Object.create原型方法

構(gòu)造函數(shù)內(nèi)部原理

1、在函數(shù)體最前面隱式的加上this = {};
2、執(zhí)行this.xxx = xxx;
3、隱式的返回this

function Student(name, age, sex){
    //var this = {
    //    name : "zhangsan",
    //    age:18
    //}
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.grade = 2017;
    return this;
}

var student = new Student('zhangsan', 18, 'male');
//構(gòu)造函數(shù)必須使用new語句。+++

要注意,如果顯示的添加一個(gè)return,那最后返回的就是這個(gè)return。但是如果返回的是原始值,那是不可以的。

但凡要使用new的話,你可以添加return來搗亂,但你返回的必須是對(duì)象值:數(shù)組、function(){}、對(duì)象都行。但不能返回原始值,因?yàn)槟鉵ew了,你不能返回原始值,如果你返回原始值,系統(tǒng)會(huì)強(qiáng)制忽略掉,然后強(qiáng)制返回該對(duì)象。這是一個(gè)冷門知識(shí)點(diǎn),了解一下就好!

包裝類

1、new Stirng();

2、new Boolean();

3、new Number();

原始值沒有屬性和方法,只有對(duì)象才能有屬性和方法。數(shù)字有正常的原始值數(shù)字和對(duì)象,原始值數(shù)字不能有屬性和方法,對(duì)象是可以有的。原始值通過使用new方法是可以變成對(duì)象的,但是undefined和null不可以有屬性和方法。

//原始值不能有屬性和方法,但是為什么這里還可以加屬性訪問呢?因?yàn)榘b類。
var num = 4;
num.len = 3;
console.log(num.len);

在原始值調(diào)用屬性的時(shí)候,無論是賦值還是查找,它自己不能有,所以這里發(fā)生一個(gè)隱式的轉(zhuǎn)換。new Number(4).len = 3;也就是新建一個(gè)數(shù)字對(duì)象,再讓數(shù)字對(duì)象的len等于3,來彌補(bǔ)你操作的不足。然后這步完成之后就銷毀delete。這個(gè)隱式的包裝環(huán)節(jié)叫做包裝類。

有時(shí)候會(huì)這么考你:

var arr = [1, 2, 3, 4, 5];
console.log(arr.length);    //5
arr.length = 2;
console.log(arr);    //[1, 2] 

length除了可以訪問以外,還可以被賦值。所以這里重新給length賦值的時(shí)候,數(shù)組被截?cái)嗔?。所以基于這個(gè)理論,問你:

var str = "abcd";
str.length = 2;
console.log(str);   //這里會(huì)輸出什么?
console.log(str.length);    //這里輸出的仍然是4;

字符串自己沒有l(wèi)ength屬性,那只有系統(tǒng)幫你弄一個(gè)。那就new String('abcd').length = 2; 然后這步完成之后就銷毀delete。所以輸出仍然是abcd。

點(diǎn)length (.length)是系統(tǒng)自帶的屬性,字符串本身就有,只不過是對(duì)象字符串才有這個(gè)屬性。訪問點(diǎn)length的話,系統(tǒng)會(huì)new String('abcd').length,而這個(gè)new Srting是有l(wèi)ength屬性的,new Srting的length就是字符串長度4,所以造成一個(gè)錯(cuò)覺,有時(shí)候我們可以直接用
字符串,length 其實(shí)系統(tǒng)拿的是new String的一個(gè)結(jié)果給你拋回來的。所以記住,原始值操作屬性是操作不了的。

看一道題:

var str = "abc";
str += 1;    //abc1
var test = typeof(str);     //test == "String"
if(test.length == 6){
    test.sign = "typeof的返回值結(jié)果可能為String";
    //調(diào)用包裝類new Srting(test).sign = 'xxx';
}
//訪問的時(shí)候 new Srting(test).sign;什么都沒有 
console.log(test.sign);      //undefined

原始值賦屬性值是要調(diào)用包裝類的,但是賦了等于沒賦,包裝完立馬就銷毀,是訪問不了的。

練習(xí):

 var x =1,y = z = 0;

function add(n){
    rerurn n = n +1;
}
y = add(x);

function add(n){
    rerurn n = n +3;
}
z = add(x)
// 1  4  4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,306評(píng)論 6 13
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,506評(píng)論 0 13
  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,926評(píng)論 0 5
  • 古木參天,花開鳥鳴。斑駁的光線,僻靜的角落。著一方幽境,尋幾絲清寧。孤山,靜寺,老樹,枯枝,一眼的寂然,一...
    冰夫閱讀 199評(píng)論 0 0
  • 生活就是如此狗血,幾乎是相同的劇情在9年后又重新演繹了一回。 每當(dāng)領(lǐng)導(dǎo)新舊更替,是乎都不太平,你不...
    清草閱讀 718評(píng)論 2 1

友情鏈接更多精彩內(nèi)容