刷題 js物件 改變上下文

2022-03-30 23:14:22 字數 1701 閱讀 6051

js中的物件平時用的很少,因為要學習ts和es6,發現物件裡面的內容需要學習的東西真的很多,這裡記錄看書過程中與練習物件的一些方法,方便以後回看。

先看題目

1

function

altercontext(fn, obj) 45

傳入67 altercontext(function() , )89

10要求返回

1112 rebecca yo

本人的解題思路,改變上下文肯定是作用域的問題,看了題目。又開始不確定了。

意思是,我輸入乙個函式,裡面的this.greetingthis.name要和後面輸入的物件一一對應上。這樣返回的結果才對。

書上看的是:

function

person(name, age)

//定義乙個物件

var you = new person("you", 24);

console.log(you.name);

//返回 you

console.log(you.age);

//返回 24

看著兩個引數

fn:他是函式

obj:物件

fn的this如果能改變,指向物件裡面的值就行了,

於是我改變了寫法

function altercontext(fn, obj) 

altercontext(function() ,})

//返回 rebecca,yo

成功!

完成之後,我忍不住看了別人的答案。。。。

fn.call(obj,null)

bind() 函式會建立乙個新函式(稱為繫結函式),新函式與被調函式(繫結函式的目標函式)具有相同的函式體(在 ecmascript 5 規範中內建的call屬性)。當新函式被呼叫時 this 值繫結到 bind() 的第乙個引數,該引數不能被重寫。繫結函式被呼叫時,bind() 也接受預設的引數提供給原函式。乙個繫結函式也能使用new操作符建立物件:這種行為就像把原函式當成構造器。提供的 this 值被忽略,同時呼叫時的引數被提供給模擬函式。

看的我一臉懵逼。

我個人的理解是:用了這個函式,那麼新函式與原來的函式的this指向都是相同的。如果你是new 操作符建立的物件,那麼這個函式就是無效的。

最終**returnfn.bind(obj)

發現返回了該函式,也就是說,沒有執行。。。。

修改後:returnfn.bind(obj)()

這樣就可以了。

總結:能看懂的也就這4中方法,還有好幾種在原型上做操作的,不懂這一方面,也就不亂說了。

上下文物件

ps 好久沒更新了,我把知識點都寫在了文件上,別急以後可能一天會更新好多條,哈哈哈 一 上下文概念 每乙個web project,執行時都部署在tomcat下,稱為乙個應用。部署後,啟動tomcat時,tomcat將為每乙個應用建立乙個物件,這個物件稱之為上下文物件。乙個應用有且只有乙個上下文物件,...

js的上下文

1,指向函式擁有者 2,只能在函式內部使用 1,物件宣告 this指向物件 var pet pet.speak 執行結果 true2,函式宣告 this指向global 或window function pet words pet 執行結果 true3,建構函式宣告 this指向新宣告的物件 fun...

JS執行上下文

執行上下文,即context,也不知道是誰翻譯的,不少的文獻 書籍用的都是這個詞。還記得第一次接觸這個詞時的惆悵 迷惘 不知所措,扶了扶眼鏡,翻開大辭典,還是翻譯成環境比較接地氣。js執行上下文,即js的執行環境。當我們的 執行時,會進入到不同的執行上下文,即不同的環境。在不同的環境中,有著不同的 ...