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