中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

浙江省住房城鄉(xiāng)建設(shè)廳官方網(wǎng)站推廣網(wǎng)站有效的免費方法

浙江省住房城鄉(xiāng)建設(shè)廳官方網(wǎng)站,推廣網(wǎng)站有效的免費方法,小程序開發(fā)需要多少錢?,網(wǎng)站架構(gòu)設(shè)計圖怎么做經(jīng)常會看到網(wǎng)上各種手寫bind的教程,下面是我在自己實現(xiàn)手寫bind的過程中遇到的問題與思考。如果對于如何實現(xiàn)一個手寫bind還有疑惑的話,那么可以先看看上面兩篇文章。 手寫bind vs 原生bind 我們先使用一個典型的手寫bind的例子,代碼如下&a…

經(jīng)常會看到網(wǎng)上各種手寫bind的教程,下面是我在自己實現(xiàn)手寫bind的過程中遇到的問題與思考。如果對于如何實現(xiàn)一個手寫bind還有疑惑的話,那么可以先看看上面兩篇文章。

手寫bind vs 原生bind

我們先使用一個典型的手寫bind的例子,代碼如下:

Function.prototype.bind2 = function (context) {if (typeof this !== "function") {throw new Error("Function.prototype.bind - what is trying to be bound is not callable");}var self = this;var args = Array.prototype.slice.call(arguments, 1);var fNOP = function () {};var fBound = function () {var bindArgs = Array.prototype.slice.call(arguments);return self.apply(this instanceof fNOP ? this : context, args.concat(bindArgs));}fNOP.prototype = this.prototype;fBound.prototype = new fNOP();return fBound;
}

我們首先用原生bind運行一下代碼

function Foo(a) {this.a = a}
Foo.prototype.sayHi = function( ) {}
let _Foo = Foo.bind(undefined, 'a')
new _Foo() 

原生bind

然后使用手寫版代碼,運行同樣的代碼

function Foo(a) {this.a = a}
Foo.prototype.sayHi = function( ) {}
let _Foo = Foo.bind2(undefined, 'a')
new _Foo() 

多一層__proto__

我們可以看到相比原生bind方法,手寫版的bind方法返回的構(gòu)造函數(shù),構(gòu)造出來的新對象會比原生的多一層__proto__。而這個__proto__產(chǎn)生的原因就是在很多教程中提到的防止原型鏈篡改。

這也就是為什么很多的文章會告訴你,為什么要添加下面的代碼。

var fNOP = function () {};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();

這段代碼中,使用了一個空函數(shù)作為中轉(zhuǎn),相當(dāng)于Object.create(fBound.prototype)。具體可以查看文章開頭給出的文章,里面的詳細(xì)的說明。

規(guī)范中的bind

既然說道,加上面的代碼是為了防止原型鏈篡改。我就想看看原生的bind如何處理這個問題的呢?參考 前端進階面試題詳細(xì)解答

function Foo(a) {this.a = a}
Foo.prototype.sayHi = function( ) {}
let _Foo = Foo.bind(undefined, 'a')
_Foo.prototype.sayHi = function( ) {console.log('篡改的_Foo的sayHi方法')}
(new _Foo().sayHi())

我發(fā)現(xiàn)在運行上面的代碼,程序執(zhí)行到修改_Foo的原型方法的語句時,就已經(jīng)報錯了。提示表明_Foo沒有prototype屬性!既然沒有prototype屬性,那么是不是也就不用處理原型鏈篡改的問題了呢?

之后,我查了一下規(guī)范, 在NOTE中,有下面一段話。明確指出了bind返回的函數(shù)是沒有prototype屬性,這也多少印證了上面的猜想。

Function objects created using Function.prototype.bind do not have a prototype property or the [[Code]], [[FormalParameters]], and [[Scope]] internal properties.

其中需要注意的有一點是這條:

  1. Set the [[Prototype]] internal property of F to the standard built-in Function prototype object as specified in 15.3.3.1.

我自己理解的意思是是bind出來的函數(shù)對象的prototype屬性是內(nèi)建的Function.prototype屬性, 這里應(yīng)該是說明了為什么原生的bind不會多一層__proto__屬性

小結(jié)

寫這篇的目的是總結(jié)下自己在實現(xiàn)bind過程中遇到的問題,記錄探究的過程。通過一系列手寫原生方法,鍛煉了我們對于原理的進一步認(rèn)識。但是也要注意驗證,實際去操作幾次,可能得出自己的經(jīng)驗。如果有更多的兩者對比的發(fā)現(xiàn),可以在評論里告訴我,歡迎各位大佬斧正。

http://www.risenshineclean.com/news/62394.html

相關(guān)文章:

  • 網(wǎng)站上的動圖都怎么做的中小企業(yè)網(wǎng)絡(luò)營銷現(xiàn)狀
  • 天津大學(xué)生專業(yè)做網(wǎng)站直鏈平臺
  • 網(wǎng)站建設(shè)小程序開發(fā)公司關(guān)鍵詞推廣軟件排名
  • 娛樂網(wǎng)站 建站軟件搜索引擎優(yōu)化的主要策略
  • 即刻搜索收錄網(wǎng)站口碑優(yōu)化
  • 做網(wǎng)站接私活價格怎么算seo發(fā)包排名軟件
  • 如何解析域名安徽搜索引擎優(yōu)化
  • 如何網(wǎng)上建設(shè)網(wǎng)站優(yōu)化設(shè)計全部答案
  • asp簡單購物網(wǎng)站源碼西安關(guān)鍵詞優(yōu)化排名
  • 企業(yè)網(wǎng)站建設(shè) 招標(biāo) 評分表百度官網(wǎng)認(rèn)證多少錢
  • 策劃書標(biāo)準(zhǔn)格式seo是什么職位縮寫
  • 做電影網(wǎng)站的圖片素材智能營銷方法
  • 武漢市做網(wǎng)站志鴻優(yōu)化設(shè)計答案網(wǎng)
  • c 語言能開發(fā)做網(wǎng)站嗎哪家網(wǎng)站推廣好
  • 廣東三網(wǎng)合一網(wǎng)站建設(shè)報價百度云網(wǎng)盤搜索引擎入口
  • 幼兒園行風(fēng)建設(shè)網(wǎng)站用稿資料免費網(wǎng)站模板庫
  • 修改網(wǎng)站描述易觀數(shù)據(jù)app排行
  • 網(wǎng)站標(biāo)簽名詞西安seo代運營
  • 網(wǎng)站首頁輪播圖怎么換百度開放平臺登錄
  • 個人網(wǎng)站需要備案嗎站長工具是什么
  • 網(wǎng)站關(guān)鍵詞指數(shù)查詢seo百度貼吧
  • 中國化學(xué)工程第六建設(shè)公司網(wǎng)站蚌埠seo外包
  • 怎么做頁游網(wǎng)站運營1688的網(wǎng)站特色
  • 怎么做購物網(wǎng)站到百度指數(shù)搜索榜
  • 網(wǎng)站開發(fā)需要什么基礎(chǔ)知識短視頻seo
  • 網(wǎng)站備案號什么情況下被注銷企業(yè)營銷推廣策劃
  • 佛山專注網(wǎng)站制作細(xì)節(jié)今日國際新聞最新消息十條
  • 加強統(tǒng)籌推進政府網(wǎng)站建設(shè)百度云搜索引擎官方入口
  • 專業(yè)做網(wǎng)站上海寫一篇軟文1000字
  • wap網(wǎng)站開發(fā)語言重慶小潘seo