摘要:什么是面向?qū)ο缶幊逃脤?duì)象的思想去寫代碼,就是面向?qū)ο缶幊踢^(guò)程式寫法面向?qū)ο髮懛ㄎ覀円恢倍荚谑褂脤?duì)象數(shù)組時(shí)間面向?qū)ο缶幊痰奶攸c(diǎn)抽象抓住核心問(wèn)題封裝只能通過(guò)對(duì)象來(lái)訪問(wèn)方法繼承從已有對(duì)象上繼承出新的對(duì)象多態(tài)多對(duì)象的不同形態(tài)對(duì)象的組成方法行為操作對(duì)
什么是面向?qū)ο缶幊?/b>
用對(duì)象的思想去寫代碼,就是面向?qū)ο缶幊?/p>
過(guò)程式寫法
面向?qū)ο髮懛?/p>
我們一直都在使用對(duì)象
數(shù)組Array 時(shí)間Date
面向?qū)ο缶幊蹋∣OP)的特點(diǎn)抽象:抓住核心問(wèn)題
封裝:只能通過(guò)對(duì)象來(lái)訪問(wèn)方法
繼承:從已有對(duì)象上繼承出新的對(duì)象
多態(tài):多對(duì)象的不同形態(tài)
對(duì)象的組成方法(行為、操作) —— 對(duì)象下面的函數(shù):過(guò)程、動(dòng)態(tài)的
屬性 —— 對(duì)象下面的變量:狀態(tài)、靜態(tài)的
創(chuàng)建第一個(gè)面向?qū)ο蟪绦?/b>//var obj = {}; var obj = new Object(); //創(chuàng)建了一個(gè)空的對(duì)象 obj.name = "小明"; //屬性 obj.showName = function(){ //方法 alert(this.name); } obj.showName();
為對(duì)象添加屬性和方法
Object對(duì)象
this指向
創(chuàng)建兩個(gè)對(duì)象:重復(fù)代碼過(guò)多
//var obj = {}; var obj = new Object(); //創(chuàng)建了一個(gè)空的對(duì)象 obj.name = "小明"; //屬性 obj.showName = function(){ //方法 alert(this.name); } obj.showName(); var obj2 = new Object(); obj2.name = "小強(qiáng)"; obj.showName = function(){ alert(this.name); } obj2.showName();工廠方式
面向?qū)ο笾械姆庋b函數(shù)
//工廠方式:封裝函數(shù) function createPerson(name){ //1. 原料 var obj = new Object(); //2. 加工 obj.name = name; obj.showName = function(){ alert(this.name); }; //3. 出廠 return obj; } var p1 = createPerson("小明"); p1.showName(); var p2 = createPerson("小強(qiáng)"); p2.showName();
改成與系統(tǒng)對(duì)象類似的寫法
1、首字母大寫
2、New關(guān)鍵字提取
3、this指向?yàn)樾聞?chuàng)建的對(duì)象
/* 當(dāng)new去調(diào)用一個(gè)函數(shù):這個(gè)時(shí)候函數(shù)中的this就是創(chuàng)建出來(lái)的對(duì)象,而且函數(shù)的返回值直接就是this啦。(這叫做隱式返回) */ // new后面調(diào)用的函數(shù):構(gòu)造函數(shù) function CreatePerson(name){ this.name = name; this.showName = function(){ alert(this.name); }; // return obj; 隱式返回,所以這一行不用寫了 } var p1 = new CreatePerson("小明"); p1.showName(); var p2 = new CreatePerson("小強(qiáng)"); p2.showName();
構(gòu)造函數(shù)
用來(lái)創(chuàng)建對(duì)象的函數(shù),叫做構(gòu)造函數(shù)
存在的問(wèn)題
1、對(duì)象的引用
2.浪費(fèi)內(nèi)存
/* 當(dāng)new去調(diào)用一個(gè)函數(shù):這個(gè)時(shí)候函數(shù)中的this就是創(chuàng)建出來(lái)的對(duì)象,而且函數(shù)的返回值直接就是this啦。(這叫做隱式返回) */ // new后面調(diào)用的函數(shù):構(gòu)造函數(shù) function CreatePerson(name){ this.name = name; this.showName = function(){ alert(this.name); }; // return obj; 隱式返回,所以這一行不用寫了 } var p1 = new CreatePerson("小明"); p1.showName(); var p2 = new CreatePerson("小強(qiáng)"); p2.showName(); //alert(p1.showName == p2.showName); //false
/* var a = [1, 2, 3]; var b = [1, 2, 3]; alert(a == b); //false; */ /* var a = 5; var b = a; b += a; alert(b); //8 alert(a); //5 基本類型:賦值的時(shí)候只是值的復(fù)制 */ /* var a = [1, 2, 3]; var b = a; b.push(4); alert(b); //[1, 2, 3, 4] alert(a); //[1, 2, 3, 4] 對(duì)象類型:賦值不僅是值的復(fù)制,而且也是引用的傳遞 */ /* var a = [1, 2, 3]; var b = a; b = [1, 2, 3, 4]; alert(b); //[1, 2, 3, 4] alert(a); //[1, 2, 3] 只要賦值就會(huì)在內(nèi)存中重新生成,所以a,b互補(bǔ)影響 */ /* var a = 5; var b = 5; alert(a == b); //true 基本類型的比較:只要值相同就可以 */ /* var a = [1, 2, 3]; var b = [1, 2, 3]; alert(a == b); //false 對(duì)象類型:值和引用都相同才行 */ /* var a = [1, 2, 3]; var b = a; alert(a == b); //true */原型 —— prototype
概念
去改寫對(duì)象下面公用的方法或者屬性,讓公用的方法或者屬性在內(nèi)存中僅存在一份(好處:提高性能)
學(xué)習(xí)原型
類比:原型就是CSS中的class(普通方法就是CSS中的style)
普通方法的優(yōu)先級(jí)比原型要高
原型可以復(fù)用,普通方法不可以復(fù)用
var arr = []; arr.number = 10; Array.prototype.number = 20; alert(arr.number); //10 普通方法的優(yōu)先級(jí)高于原型
//原型:prototype:要寫在構(gòu)造函數(shù)下面 var arr = [1, 2, 3, 4, 5]; var arr2 = [2, 2, 2, 2, 2]; Array.prototype.sum = function(){ var result = 0; for(var i=0; i通過(guò)原型改寫工廠方式原則:
相同的屬性和方法可以加在原型上
混合的編程模式
function CreatePerson(name){ this.name = name; //變化的,不能公用的屬性不能寫在原型上 } CreatePerson.prototype.showName = function(){ alert(this.name); } var p1 = new CreatePerson("小明"); var p2 = new CreatePerson("小強(qiáng)"); alert(p1.showName == p2.showName); //true混合的編程模式
//面向?qū)ο蟮膶懛?function 構(gòu)造函數(shù)(){ this.屬性 } 構(gòu)造函數(shù).原型.方法 = function(){}; //面向?qū)ο蟮氖褂?var 對(duì)象1 = new 構(gòu)造函數(shù)(); 對(duì)象1.方法();總結(jié)面向?qū)ο髮懛?構(gòu)造函數(shù)加屬性,原型加方法
面向?qū)ο蟮倪x項(xiàng)卡原則
先寫出普通的寫法,然后改成面向?qū)ο髮懛?/p>
普通方法變型
盡量不要出現(xiàn)函數(shù)嵌套函數(shù)
可以有全局變量
把onload中不是賦值的語(yǔ)句放到多帶帶的函數(shù)中
改成面向?qū)ο?/p>
全局變量就是屬性
函數(shù)就是方法
onload中創(chuàng)建對(duì)象
改this指向問(wèn)題,要盡量讓面向?qū)ο笾械膖his指向?qū)ο?/p>
1、先寫出普通方法
面向?qū)ο蟮倪x項(xiàng)卡 1111122222333332、普通方法變型
面向?qū)ο蟮倪x項(xiàng)卡 111112222233333關(guān)于this的指向
oDiv.onclick = function(){ this: oDiv }; --- oDiv.onclick = show; function show(){ this: oDiv } --- oDiv.onclick = function(){ show(); }; function show(){ this: window }改寫成面向?qū)ο?/strong>
面向?qū)ο骲ianxie 111112222233333面向?qū)ο蟮膹?fù)用
面向?qū)ο蟮耐献?/b>面向?qū)ο骲ianxie 111112222233333111112222233333注意
Event對(duì)象(event對(duì)象一定要寫到事件函數(shù)里面)
事件函數(shù)中用來(lái)阻止默認(rèn)行為的return false也要寫到事件函數(shù)里面
!DOCTYPE html>本課練習(xí)面向?qū)ο缶帉懲献?/title> 為數(shù)組對(duì)象添加求和,最大值
為字符串對(duì)象添加判斷是不是最后一個(gè)字母
面向?qū)ο蟮倪x項(xiàng)卡
給選項(xiàng)卡添加一個(gè)自動(dòng)播放的方法
任意學(xué)過(guò)的效果改寫成面向?qū)ο?/p>
面向?qū)ο蟮拿嬖囶}
高級(jí)面向?qū)ο?/b> 包裝對(duì)象JS基于原型的程序
String Number Boolean給基本類型添加方法 原型鏈實(shí)例對(duì)象與原型之間的連接,叫做原型鏈
proto (隱式連接)
Object對(duì)象類型是原型鏈的最外層
面向?qū)ο蟮囊恍傩院头椒?/b> hasOwnProperty()看是不是對(duì)象自身下面的屬性面向?qū)ο笾械脑玩?/title> constructor查看對(duì)象的構(gòu)造函數(shù)面向?qū)ο笾械脑玩?/title> 每個(gè)原型都會(huì)自動(dòng)添加constructor屬性
for in 的時(shí)候,有些屬性是找不到的
避免修改constructor屬性
面向?qū)ο笾械脑玩?/title> for in循環(huán),有些屬性找不到
instanceof運(yùn)算符面向?qū)ο笾械脑玩?/title> 對(duì)象與構(gòu)造函數(shù)在原型鏈上是否有關(guān)系
可以用來(lái)作類型判斷toString()instanceof() object上的方法
對(duì)象的繼承 什么是繼承toString() 在原有對(duì)象的基礎(chǔ)上,略作修改,得到一個(gè)新的對(duì)象
不影響原有對(duì)象的功能
如何添加繼承屬性:call
方法:for in
例子:繼承的拖拽
!DOCTYPE html>繼承 繼承 繼承的拖拽繼承 繼承的其他形式1、類式繼承
利用構(gòu)造函數(shù)(類)繼承的方式
2、原型繼承
借助原型來(lái)實(shí)現(xiàn)對(duì)象繼承對(duì)象
類式繼承原型繼承
原型繼承 拷貝繼承:通用型的 有new或無(wú)new的時(shí)候都可以
類式繼承:適合通過(guò)new構(gòu)造函數(shù)形式
原型繼承:比較適合無(wú)new的對(duì)象
組件開發(fā)1、對(duì)象的多種表現(xiàn)形式
提高對(duì)象的復(fù)用性
如何配置參數(shù)和默認(rèn)參數(shù)
例子:拖拽
例子:彈窗
2、什么是組件?
對(duì)面向?qū)ο蟮纳钊霊?yīng)用(UI組件、功能組件)
將配置參數(shù)、方法、事件、三者進(jìn)行分離
3、創(chuàng)建自定義事件
有利于多人協(xié)作開發(fā)代碼
如何去掛載自定義事件與事件函數(shù)
4、例子:基于JQ的選項(xiàng)卡的組件開發(fā)模式
如何配置參數(shù)和默認(rèn)參數(shù)
trigger() extend()等方法的使用
5、本課練習(xí)
組件開發(fā)的練習(xí)
http://tangram.baidu.com/magic/拖拽的組件開發(fā)組件開發(fā)中的參數(shù)問(wèn)題 彈窗的組件開發(fā) 理解自定義事件彈窗的組件開發(fā) 用原生js實(shí)現(xiàn)自定義事件自定義事件 配置、方法、自定義事件分離自定義事件 divspan——正規(guī)組件的寫法——基于拖拽的組件進(jìn)行的修改
用JQ實(shí)現(xiàn)選項(xiàng)卡的組件開發(fā)自定義事件的拖拽組件 基于JQ的選項(xiàng)卡組件開發(fā) 111111222222333333111111222222333333111111222222333333111111222222333333
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79368.html
摘要:更形象的我們還可以將面向?qū)ο罄斫鉃橐环N宗教信仰。這就導(dǎo)致面向?qū)ο蠼痰某绦騿T們?cè)趯憰r(shí)就很難受。所以為了滿足信仰面向?qū)ο蠼痰男枨笸ㄟ^(guò)構(gòu)造函數(shù)的形式模擬了偽類。這個(gè)套路的核心就是類那么里沒(méi)有類所以其實(shí)是通過(guò)構(gòu)造函數(shù)來(lái)模擬的偽類。 JS面向?qū)ο笾?【概述】 在學(xué)習(xí)JS的面向?qū)ο笾?我們應(yīng)該先自問(wèn)這樣幾個(gè)問(wèn)題: 面向?qū)ο笫鞘裁匆馑? 學(xué)習(xí)面向?qū)ο蟮暮诵氖鞘裁? 為什么要學(xué)習(xí)面向?qū)ο?(它的...
摘要:面向過(guò)程函數(shù)式編程面向?qū)ο缶幊痰诙€(gè)并不是大家理解的那樣,我們先說(shuō)舉個(gè)現(xiàn)實(shí)例子就明白了。多說(shuō)一句函數(shù)是編程是非常強(qiáng)大也是我最喜歡的,以后再說(shuō),我們先說(shuō)面向?qū)ο缶幊獭? 概述 當(dāng)大家已經(jīng)把js的語(yǔ)言基礎(chǔ)理解了,然后能夠?qū)懗鲆恍┖?jiǎn)單的例子了,這個(gè)時(shí)候基本上達(dá)到了一年工作經(jīng)驗(yàn)的水平,而自己能夠獨(dú)立的寫一些小功能,完成一些小效果,或者臨摹修改一些比較復(fù)雜的插件的時(shí)候差不多就是兩年工作經(jīng)驗(yàn)的水平,...
摘要:對(duì)象重新認(rèn)識(shí)面向?qū)ο竺嫦驅(qū)ο髲脑O(shè)計(jì)模式上看,對(duì)象是計(jì)算機(jī)抽象現(xiàn)實(shí)世界的一種方式。除了字面式聲明方式之外,允許通過(guò)構(gòu)造器創(chuàng)建對(duì)象。每個(gè)構(gòu)造器實(shí)際上是一個(gè)函數(shù)對(duì)象該函數(shù)對(duì)象含有一個(gè)屬性用于實(shí)現(xiàn)基于原型的繼承和共享屬性。 title: JS對(duì)象(1)重新認(rèn)識(shí)面向?qū)ο? date: 2016-10-05 tags: JavaScript 0x00 面向?qū)ο?從設(shè)計(jì)模式上看,對(duì)象是...
摘要:是完全的面向?qū)ο笳Z(yǔ)言,它們通過(guò)類的形式組織函數(shù)和變量,使之不能脫離對(duì)象存在。而在基于原型的面向?qū)ο蠓绞街?,?duì)象則是依靠構(gòu)造器利用原型構(gòu)造出來(lái)的。 JavaScript 函數(shù)式腳本語(yǔ)言特性以及其看似隨意的編寫風(fēng)格,導(dǎo)致長(zhǎng)期以來(lái)人們對(duì)這一門語(yǔ)言的誤解,即認(rèn)為 JavaScript 不是一門面向?qū)ο蟮恼Z(yǔ)言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽?,從?duì)語(yǔ)言感悟的角度闡述為什...
摘要:自己的理解的第一個(gè)參數(shù)就是的值如果沒(méi)用默認(rèn)是那個(gè)調(diào)用函數(shù)的當(dāng)前的對(duì)象在全局作用域中就是被隱藏的所以不寫且在全局作用于調(diào)用函數(shù)的時(shí)候就是可以使用或者自己指定的指向 JS面向?qū)ο笠?MVC的面向?qū)ο蠓庋b MDNjavascript面向?qū)ο?面向?qū)ο?Object-Oriented) showImg(https://segmentfault.com/img/remote/1460000016...
閱讀 4012·2021-11-18 13:22
閱讀 1829·2021-11-17 09:33
閱讀 2886·2021-09-26 09:46
閱讀 1220·2021-08-21 14:11
閱讀 2896·2019-08-30 15:53
閱讀 2717·2019-08-30 15:52
閱讀 1914·2019-08-30 10:52
閱讀 1528·2019-08-29 15:30