js的面向?qū)ο?js是面向?qū)ο笳Z(yǔ)言嗎

面向?qū)ο缶幊?jpg

1. 什么是面向?qū)ο?/h1>

(1) 面向?qū)ο笏枷胫? 有兩個(gè)主要的概念:
: 有相同的特征和行為的事物的抽象
對(duì)象: 類的一個(gè)實(shí)例
舉個(gè)例子: 你們的媳婦,就是;我的媳婦,就是對(duì)象......?

(2) js不是一個(gè)嚴(yán)格的面向?qū)ο笳Z(yǔ)言
說(shuō)javascript是一種基于對(duì)象的語(yǔ)言應(yīng)該更正確些,但說(shuō)javascript不面向?qū)ο竽褪恚谖铱磥?lái)則是錯(cuò)誤的認(rèn)知泽本。只是javascript的面向?qū)ο笈c傳統(tǒng)的class-basedOO(基于類的面向?qū)ο?相比, javascript有它與眾不同的地方,其實(shí)主要是因?yàn)樗鼪](méi)有提供象抽象、繼承故响、重載等有關(guān)面向?qū)ο笳Z(yǔ)言的許多功能, 而是把其它語(yǔ)言所創(chuàng)建的復(fù)雜對(duì)象統(tǒng)一起來(lái),從而形成一個(gè)非常強(qiáng)大的對(duì)象系統(tǒng)虚倒。 這種獨(dú)特性稱它為prototype-basedOO(基于原型的面向?qū)ο?.

2. 在js中判斷一個(gè)變量是否是一個(gè)對(duì)象的方法

(1) typeof

console.log(typeof 12);
console.log(typeof "打發(fā)");
console.log(typeof true);
                
var fn = function () {};
console.log(typeof fn);
                
var Arr = ["1", "2", "是打發(fā)"];
console.log(typeof Arr);// object 對(duì)象 引用類型
打印結(jié)果.png

(2) instanceof(判斷是不是對(duì)象)

var fn = function () {};
var Arr = ["1", "2", "是打發(fā)"];
console.log(Arr instanceof Object);
console.log(fn instanceof Object);
console.log(true instanceof Object);
                
console.log(Arr instanceof Array);
                
注: 'aa' , 123 直接寫是基本類型, 不是引用類型
var str = new String('aa');
console.log(str instanceof String);
console.log('aa' instanceof String);
打印結(jié)果.png

2. 如何自己創(chuàng)建一個(gè)對(duì)象

(1) 直接創(chuàng)建

結(jié)構(gòu): 
var 變量名 = {
     屬性名1 : 值,
     屬性名2 : 值,
     函數(shù)名 : function () {
         函數(shù)內(nèi)容...
     }
}
var stu = {
    name : "笨蛋",
    age : 18,
    sex : "男",
    sayHi : function () {
        console.log(this.name);
    }
}
console.log(stu.name);
stu.sayHi();
對(duì)象調(diào)用自己的函數(shù)
var cf = {
    name : "Barrett-毀滅",
    age : 2,
    money : "$148",
    buibui : function () {
        console.log(this.money);
        }
}
cf.buibui();
打印結(jié)果.png

(2) 對(duì)象的構(gòu)造函數(shù)

如果要批量創(chuàng)建對(duì)象第一種形式會(huì)很繁瑣, 為了解決這個(gè)問(wèn)題,使用構(gòu)造函數(shù)

結(jié)構(gòu)
 function 構(gòu)造函數(shù)名(參數(shù)1, 參數(shù)2){
    this.屬性名1 = 參數(shù)1;
    this.屬性名2 = 參數(shù)2;
    this.函數(shù)名1 = function(){
         函數(shù)內(nèi)容....   
    }
}
        
        
function student(name, age) {
    this.name = name;
    this.age = age;
    this.sayHi = function() {
        console.log('我叫' + this.name)
    }
}   
注: 使用構(gòu)造函數(shù)創(chuàng)建對(duì)象
var stu1 = new student('笨蛋', 18);
console.log(stu1.name);
注: 對(duì)象調(diào)用自己的函數(shù)(行為)
stu1.sayHi();
打印結(jié)果.png

(3) 原型(prototype)

每一個(gè)構(gòu)造函數(shù)都有一個(gè)原型屬性;
舉個(gè)列子: "照貓畫虎”烙荷,這里的貓就是原型,而虎就是類型虑稼,用JavaScriptprototype來(lái)表示就是: “虎.prototype = 某個(gè)貓” 或者 “虎.prototype=new 貓()”;
寫個(gè)代碼:

function student(name, age) {
    this.name = name;
    this.age = age;
    this.sayHi = function() {
        alert('我叫' + this.name)
    }
}
var stu1 = new student('笨蛋', 18);
student.prototype.school = '清華';
student.prototype.saySchool = function () {
    console.log('我的母校是' + this.school);
}
console.log(stu1.school);
stu1.saySchool();
        
var stuBeida = new student("傻妞", 19);
stuBeida.school = '北大';
console.log(stuBeida.school);
console.log(stu1.school);
打印結(jié)果.png
既然每一個(gè)構(gòu)造函數(shù)都有一個(gè)原型屬性, 那系統(tǒng)的也就可以有, 比如可以給數(shù)組原型添加一個(gè)函數(shù),如下:
給數(shù)組原型添加sum的一個(gè)函數(shù)
var arr = [1, 3, 5, 8];
Array.prototype.sum = function () {
    var temp = 0;
    for (var i = 0; i < this.length; i++) {
        temp += this[i];
    }
    return temp;
};
console.log(arr.sum());
打印結(jié)果為17

說(shuō)一下原型鏈的問(wèn)題,就是當(dāng)要獲取對(duì)象的某個(gè)屬性的值的時(shí)候:

  1. 判斷當(dāng)前這個(gè)對(duì)象是否存在這個(gè)屬性,如果有就輸出
  2. 如果第一步?jīng)]有獲取到, 就去構(gòu)造函數(shù)的原型中找
  3. 如果1和2都沒(méi)獲取到, 去Object構(gòu)造函數(shù)的原型中找
  4. 如果123都沒(méi)找到, 就輸出undefined

另外, 畫布canvas的使用經(jīng)常會(huì)用到面向?qū)ο? cancas是H5中一個(gè)非常神奇的東西, 以后我再介紹吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脆丁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子动雹,更是在濱河造成了極大的恐慌槽卫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胰蝠,死亡現(xiàn)場(chǎng)離奇詭異歼培,居然都是意外死亡震蒋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門躲庄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)查剖,“玉大人,你說(shuō)我怎么就攤上這事噪窘∷褡” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵倔监,是天一觀的道長(zhǎng)直砂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)浩习,這世上最難降的妖魔是什么静暂? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮谱秽,結(jié)果婚禮上洽蛀,老公的妹妹穿的比我還像新娘。我一直安慰自己疟赊,他們只是感情好郊供,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著近哟,像睡著了一般颂碘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椅挣,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天头岔,我揣著相機(jī)與錄音,去河邊找鬼鼠证。 笑死峡竣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的量九。 我是一名探鬼主播适掰,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荠列!你這毒婦竟也來(lái)了类浪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肌似,失蹤者是張志新(化名)和其女友劉穎费就,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體川队,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡力细,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年睬澡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眠蚂。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煞聪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逝慧,到底是詐尸還是另有隱情昔脯,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布笛臣,位于F島的核電站云稚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捐祠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一桑李、第九天 我趴在偏房一處隱蔽的房頂上張望踱蛀。 院中可真熱鬧,春花似錦贵白、人聲如沸率拒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)猬膨。三九已至,卻和暖如春呛伴,著一層夾襖步出監(jiān)牢的瞬間勃痴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工热康, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沛申,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓姐军,卻偏偏與公主長(zhǎng)得像铁材,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奕锌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容