第七節(jié) THIS和git

THIS的五種情況匯總:

1、在事件綁定中:給當(dāng)前元素的某事件行為綁定方法,事件行為觸發(fā),此時(shí)方法中的this是當(dāng)前操作元素本身

2、普通方法執(zhí)行看“點(diǎn)”2-1、方法執(zhí)行看前面有沒(méi)有點(diǎn),如果有,點(diǎn)前面是誰(shuí),this就是誰(shuí),如果沒(méi)有,this就是window,或者嚴(yán)格模式下的undefined2-2、自執(zhí)行的函數(shù)一般是window,嚴(yán)格模式下是undefined2-3、回調(diào)函數(shù):一般來(lái)說(shuō)是window,除非在執(zhí)行回調(diào)函數(shù)「內(nèi)部方法」做了特殊處理

3、構(gòu)造函數(shù)執(zhí)行「new 執(zhí)行」 構(gòu)造函數(shù)體中的this是當(dāng)前類的實(shí)例

4、箭頭函數(shù)中(含塊級(jí)上下文)沒(méi)有自己的this,所用的this是上級(jí)上下文「宿主環(huán)境」的this, 箭頭函數(shù)好用但是不能濫用,不涉及this隨便用

5、基于Function.prototype上的call、bind、apply強(qiáng)制改變this指向

1、全局下指的是window

console.log(this);

2、函數(shù)調(diào)用的情況

函數(shù)執(zhí)行就看函數(shù)前有沒(méi)有點(diǎn),如果有,點(diǎn)前面是誰(shuí),this就是誰(shuí),如果沒(méi)有,this就是window,或者嚴(yán)格模式下的undefined

//'use strict'

functionfn(){

console.log(this)

}

fn();//這里的this就是window,在嚴(yán)格模式下就是undefined

varobj={

name:"li",

fn:fn,

}

obj.fn();//這里的this就是obj

自執(zhí)行的函數(shù)一般是window,嚴(yán)格模式下是undefined

//'use strict';

(function(){

console.log(this)//window

})()

回調(diào)函數(shù):一般來(lái)說(shuō)是window,除非在執(zhí)行回調(diào)函數(shù)「內(nèi)部方法」做了特殊處理


<div id="box">11111</div>

<script>

box.onclick=function(){

console.log(this)

}

</script>

</body>

=======================

setTimeout(function(){

console.log(this);

},1000);

THIS練習(xí)題

1、

var name="珠峰培訓(xùn)";

function fn(){

? console.log(this.name)

}

var obj={

? name:"你好世界",

? fn:fn

}

obj.fn();

fn();

(function(){

? this.fn();

})();

答案:你好世界? 珠峰培訓(xùn)? 珠峰培訓(xùn)

2、

var a = 10;

function foo () {

? console.log(this.a)

}

foo();

答案:10

3、

var a = 10;

function foo () {

? console.log('this1', this)

? console.log(window.a)

? console.log(this.a)

}

console.log(window.foo)

console.log('this2', this)

foo();

答案:函數(shù) window window 10 10

4、

let a = 10

const b = 20

function foo () {

? console.log(this.a)

? console.log(this.b)

}

foo();

console.log(window.a)

答案:undefined undefined undefined

5、

var a = 1

function foo () {

? var a = 2

? console.log(this)

? console.log(this.a)

}

foo()

答案:window 1

6、

var obj1 = {

? a: 1

}

var obj2 = {

? a: 2,

? foo1: function () {

? ? console.log(this.a)

? },

? foo2: function () {

? ? setTimeout(function () {

? ? ? console.log(this)

? ? ? console.log(this.a)

? ? }, 0)

? }

}

var a = 3

obj2.foo1()

obj2.foo2()

答案:2 window 3

7、

let obj={

? name:"li",

? fn:(function(n){

? ? ? // 這里的this

? ? ? console.log(this);

? ? ? return function(){

? ? ? ? ? // 這里的this

? ? ? ? ? console.log(this);

? ? ? }

? })(10),

}

obj.fn();

答案:window? 對(duì)象obj

8、

function fn(){

? // 這里的this

? console.log(this);

}

box.onclick=function(){

? ? console.log(this);

? ? fn()

}

答案:box元素? window

9、

var num=10;

var obj={num:20};

obj.fn=(function(num){

? this.num=num*3;

? num++;

? return function(n){

? ? ? this.num+=n;

? ? ? num++;

? ? ? console.log(num);

? }

})(obj.num);

var fn=obj.fn;

fn(5);

obj.fn(10);

console.log(num,obj.num)

答案:22 23 65 30

10、

var obj = {

? name: 'obj',

? foo1: () => {

? ? console.log(this.name)

? },

? foo2: function () {

? ? console.log(this.name)

? ? return () => {

? ? ? console.log(this.name)

? ? }

? }

}

var name = 'window'

obj.foo1()

obj.foo2()()

答案:window? ? obj? obj

11、

varname='window'

varobj1={

name:'obj1',

foo:function(){

console.log(this.name)

}

}

varobj2={

name:'obj2',

foo:()=>{

console.log(this.name)

}

}

obj1.foo()

obj2.foo()

答案:obj1? window

12、

varname='window'

varobj1={

name:'obj1',

foo:function(){

console.log(this.name)

returnfunction(){

console.log(this.name)

}

}

}

varobj2={

name:'obj2',

foo:function(){

console.log(this.name)

return()=>{

console.log(this.name)

}

}

}

varobj3={

name:'obj3',

foo:()=>{

console.log(this.name)

returnfunction(){

console.log(this.name)

}

}

}

varobj4={

name:'obj4',

foo:()=>{

console.log(this.name)

return()=>{

console.log(this.name)

}

}

}

obj1.foo()()

obj2.foo()()

obj3.foo()()

obj4.foo()()

答案:

obj1.foo()()// 'obj1' 'window'

obj2.foo()()// 'obj2' 'obj2'

obj3.foo()()// 'window' 'window'

obj4.foo()()// 'window' 'window'




DOS命令窗口

1、?打開(kāi)dos命令窗口的幾種方法:

1)?window+?r?或者在搜索里面?輸入cmd

2)在資源管理器的當(dāng)前路徑上直接輸入cmd

3)?鼠標(biāo)右鍵?git?bash?here

2、常用的dos命令

dos 是linxu 寫的,用c開(kāi)發(fā)的,我們先來(lái)說(shuō)下linxu 常用的一些命令

打開(kāi)對(duì)應(yīng)的文件夾:cd? 文件夾? ? (確定當(dāng)前目錄下有改文件夾) 比如:C:\Users\Administrator\Desktop\test>cd a.txt

回退到上一級(jí): cd ../

查看當(dāng)前目錄下的文件夾:cd + tab

返回到根目錄:cd + /

創(chuàng)建一個(gè)文件夾:mkdir + 文件名

創(chuàng)建一個(gè)文件:??touch 文件名.txt ,然后按回車。

重命名一個(gè)文件或者文件夾: rename b f

刪除一個(gè)文件夾:rd + 文件夾名 (只能刪除空的文件夾)

刪除一個(gè)文件夾:rd + /s + 文件夾名 (硬刪除,即使里面有內(nèi)容也能刪除)

刪除一個(gè) 文件: del + 文件夾名

清空命令行:cls

切換磁盤命令:D:?/F:/C:?切換到相應(yīng)的盤符

如果不想一個(gè)個(gè)敲路徑,可以用:cd + 把文件拖過(guò)來(lái)? 自動(dòng)生成此路徑(mac 本)

MAC DOS常用命令

調(diào)出終端

? command+空格打開(kāi)搜索欄,搜索term打開(kāi)終端

常用操作

clear 清空屏幕內(nèi)容

pwd 查看當(dāng)前所在目錄位置(路徑)

ls 顯示當(dāng)前目錄下的文件內(nèi)容

ls+路徑 顯示路徑位置目錄下的內(nèi)容

cd -回到上一個(gè)目錄

cd ~回到用戶目錄

/根目錄

./當(dāng)前目錄

../上一級(jí)目錄

mkdir ABC 在當(dāng)前位置下,創(chuàng)建一個(gè)ABC名字的文件夾

touch ABC.c 在當(dāng)前位置下,創(chuàng)建一個(gè)ABC名字的c文件

cd User 進(jìn)去User文件夾

rm ABC.c 當(dāng)前位置下,刪除ABC.c文件

rm -rf User/ 刪除當(dāng)前位置下User文件夾(里面文件都會(huì)刪除)

進(jìn)入文件后vi命令

命令模式(Esc鍵 進(jìn)入)

:q 退出

:w 保存

:wq 保存并退出

:q! 不保存退出

git版本控制系統(tǒng)

?1、git(版本控制系統(tǒng));到底什么是git,git又是做什么的呢

????+?記錄歷史版本信息

????+?方便團(tuán)隊(duì)之間協(xié)作開(kāi)發(fā)

?2、國(guó)內(nèi)常用的版本控制系統(tǒng)

????+?git:分布式管理系統(tǒng)

????+?svn:集中式版本管理系統(tǒng)

????+?分布式和集中式的各自特點(diǎn)

1)svn集中式版本控制系統(tǒng)

2)git 分布式版本控制系統(tǒng)


3、git的安裝:

????>?git官網(wǎng)??https://git-scm.com/downloads

????>?安裝成功后在桌面右鍵會(huì)出來(lái)兩個(gè)git選項(xiàng)(打開(kāi)git?bash?here,然后執(zhí)行g(shù)it?--version)

????>?GIT是linux創(chuàng)始人研發(fā)的工具,所以GIT中的操作大部分都是linux操作命令

4、git的工作原理(分為三個(gè)區(qū))

????+?工作區(qū):我們平時(shí)寫代碼的區(qū)域

????+?暫存區(qū):用來(lái)臨時(shí)存儲(chǔ)代碼

????+?歷史區(qū):生成歷史版本

5、?git的使用

????- 1、git的全局配置

????????+?git?config?--global?--list:查看全局配置信息

????????+?git?config?--global?user.name?'xxx'??

????????+?git?config?--global?user.email?'xxx@xxx'

6、創(chuàng)建本地倉(cāng)庫(kù),完成版本控制

????????+?1、創(chuàng)建本地倉(cāng)庫(kù)

????????????+?git?init(會(huì)默認(rèn)生成一個(gè).git文件夾,這里是存放你本地git倉(cāng)庫(kù)的信息的,不能刪除)

????????????+?shift?+?cmmand?+?.??mac電腦顯示隱藏目錄


+?2、在工作區(qū)編寫代碼完成后,提交到暫存區(qū)

????????????+?git?add?文件名(把指定文件提交到暫存區(qū))

????????????+?git?add?A(把工作區(qū)所有文件提交到暫存區(qū))

????????????+?git?add?.?(把工作區(qū)所有修改的和新增的文件提交到暫存區(qū),不包括刪除的)

????????????+?git?status(查看當(dāng)前文件提交狀態(tài))【紅色代表在工作區(qū);綠色代表在暫存區(qū);沒(méi)有文件,并顯示clear之類的單詞,說(shuō)明文件已經(jīng)提交到歷史區(qū)或者沒(méi)有任何更改】

????????????clear:清屏

????????+?3、把文件提交到歷史區(qū)

????????????+?git?commit?-m'描述'?(把文件提交到歷史區(qū),并生成此次提交的歷史版本)

????????????+?git?log(查看提交的歷史版本信息,不包括回滾)

????????????+?git?reflog(查看所有的歷史版本信息,包括回滾信息)

????????+?4、回滾指定歷史版本的代碼

????????????+?git?reset?--hard?七位歷史版本號(hào)

7、遠(yuǎn)程倉(cāng)庫(kù)的使用

????-?1、介紹遠(yuǎn)程倉(cāng)庫(kù)github

????????+?github是一個(gè)開(kāi)源的代碼分享平臺(tái);每一個(gè)github賬戶都可以把自己的代碼分享到這個(gè)平臺(tái)上,那他就是充當(dāng)中央服務(wù)器的角色,把代碼提交到這個(gè)平臺(tái)上之后,你可以在任何一個(gè)有網(wǎng)絡(luò)的地方去下載代碼,還可以配置下載的權(quán)限

????-?2、創(chuàng)建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)(點(diǎn)擊左上角綠色的按鈕?New)

????????+?Repository?name:新建倉(cāng)庫(kù)的名稱

????????+?Description:新建倉(cāng)庫(kù)的描述

????????+?Public/Private:新建倉(cāng)庫(kù)是公開(kāi)還是私密的

????????+?Initialize?this?repository?with:為倉(cāng)庫(kù)增加初始化文件(暫時(shí)不選)

????????+?綠色按鈕?Create?repository:?創(chuàng)建新的倉(cāng)庫(kù)

????-?3、把本地倉(cāng)庫(kù)的代碼提交到遠(yuǎn)程倉(cāng)庫(kù)

????????+?1、本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)建立連接

????????????+?git?remote?-v(查看本地和遠(yuǎn)程倉(cāng)庫(kù)的連接狀態(tài))

????????????+?git?remote?add?origin?遠(yuǎn)程倉(cāng)庫(kù)地址(和遠(yuǎn)程倉(cāng)庫(kù)的某個(gè)新項(xiàng)目建立連接,origin這個(gè)名可以改,但是大? 家都統(tǒng)一叫這個(gè))

????????+?2、git?pull?origin?master?(拉取遠(yuǎn)程倉(cāng)庫(kù)的代碼到本地)

????????+?3、git?push?origin?master?(推送本地的代碼到遠(yuǎn)程倉(cāng)庫(kù))

????????【要輸入用戶名和密碼?username??password】

????-?4、git?clone?遠(yuǎn)程倉(cāng)庫(kù)地址?倉(cāng)庫(kù)的名字(如果不寫默認(rèn)原倉(cāng)庫(kù)名)

????????+?其真正的開(kāi)發(fā)中,大家都使用這個(gè)

????????+?你們的項(xiàng)目老大把項(xiàng)目骨架搭建好之后你們每一個(gè)項(xiàng)目小組成員都去把遠(yuǎn)程的代碼拉取到你們的本地去開(kāi)發(fā)

????????+?git?clone

面向?qū)ο缶幊蹋?br>

了解面向?qū)ο缶幊趟枷?,需要先了解?duì)象、類、實(shí)例。萬(wàn)物皆對(duì)象,一切都可以看成對(duì)象,什么是類?比如咱們自然界中有很多的生物,咱們可以把這些生物分為:植物、動(dòng)物。。。,那植物就是一個(gè)類,動(dòng)物也是類,動(dòng)物還可進(jìn)行細(xì)分,比如:高級(jí)動(dòng)物、低級(jí)動(dòng)物,都是分類。什么是實(shí)例呢?比如說(shuō)人類是一個(gè)分類,那具體的某個(gè)人,比如:麗麗就是一個(gè)人類中的一個(gè)實(shí)例,我想研究人類有哪些特點(diǎn),就具體的拿這個(gè)人來(lái)研究就行。咱們?cè)趯W(xué)習(xí)js的時(shí)候,也是按照這個(gè)思想去學(xué)習(xí)。

對(duì)象:萬(wàn)物皆對(duì)象

類:對(duì)象的具體細(xì)分,按照功能或者特征進(jìn)行分類

實(shí)例:類中具體的一個(gè)事物(拿出具體的一個(gè)實(shí)例進(jìn)行研究,當(dāng)前類下的其它實(shí)例也會(huì)具有這些特點(diǎn)和特征)

面向?qū)ο螅?面向?qū)ο笫俏覀冋麄€(gè)編程語(yǔ)言中的一個(gè)思想,在編程語(yǔ)言中,對(duì)象是一種泛指(一切研究的事物都是對(duì)象),我們按照一定的功能和特點(diǎn),可以把它劃分成大類和小類,而類中又有很多的實(shí)例,類給實(shí)例賦予了一些公有的屬性方法而實(shí)例自身還可以有自身獨(dú)有的一些屬性和方法,這種偉大的思想就叫面向?qū)ο缶幊趟枷?/p>

一、單例設(shè)計(jì)模式:

單例模式:可以把描述一個(gè)事物的所有屬性放到一個(gè)對(duì)象中,這樣避免了相互的干擾,這就是單例設(shè)計(jì)模式普通單例模式

//普通

varname="劉亦菲";

varage=18;

varsex="女";

varname="胡歌";

varage=18;

varsex="男";

//單例

varobj1={

name:"劉亦菲",

age:18,

sex:"女"

}

varobj2={

name:"胡歌",

age:20,

sex:"男"

}

高級(jí)單例模式

varutils=(function(){

functionfn(){},

vara=2;

//... 在這個(gè)作用域中還有很多的變量和方法,

return{

// 想要把誰(shuí)暴露出去,就放到這對(duì)象中

fn:fn

}

})();

console.log(nameSpace.fn)

二、工廠設(shè)計(jì)模式

把實(shí)現(xiàn)相同功能的代碼進(jìn)行封裝,后期在使用的時(shí)候,只用調(diào)用這個(gè)函數(shù)即可,方便后期的“批量生產(chǎn)”。減少了頁(yè)面中冗余的代碼,實(shí)現(xiàn)了“高耦合低內(nèi)聚”。

varperson1={

name:"lili",

age:18

}

varperson2={

name:"dava",

age:20

}

//....每次都需要重復(fù)的去寫,很麻煩,所以就可以用工廠模式

functionperson(name,age){

return{

name:name,

age:age

}


}

person("lili","18")

person("dava","20")

?著作權(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)容

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