;var person2 =
;
person1.fullname.
call
(person2)
;//返回john doe
//就是讓函式在指定物件上呼叫,this在呼叫的時候發生繫結,指向person2
c.關於this,分享乙個我以前做過的挺有意思的乙個題,:
//下面這段js程式的執行結果是什麼
var user =
}var func = user.getcount;
console.
log(
func()
;
我先將結果告訴你,是undefined,給你5分鐘思考。
好了,我來解答:
我上面說過,this只有在函式呼叫的才會發生繫結,誰呼叫的繫結誰。那麼是誰呼叫的這個函式呢?其實題目繞了乙個彎子,它宣告了乙個變數接收user物件的物件方法getcount,很明顯func是乙個函式型別的變數,這個變數是在哪兒宣告的呢?顯而易見,函式外部,在函式外部宣告的變數是什麼?是全域性變數,全域性變數是屬於哪個物件的?預設是屬於window物件的,所以下面函式的呼叫func(),就等同於window.func(),這樣的話,this肯定就繫結window物件了。然後我們看裡面執行的**,this.count就等同於執行window.count,這樣乙個語句就相當於是宣告了乙個變數但是沒有賦值,這樣的變數列印出來肯定就是undefined,如果裡面this,就是執行return count,這就相當於直接使用乙個沒有宣告的變數,程式肯定就會報錯了
如果window.count沒有懂,不妨看看下面這個例子:
var person =
person.age =10;
//js中是支援這樣給乙個物件新增乙個屬性的,這句話就是宣告新增乙個屬性並賦值
person.***;
//這就相當於宣告了乙個屬性不賦值
console.
log(person.***)
//undefined
//window物件是乙個js預先已經定義好的物件,這下懂了吧
js let和const
a.let宣告的變數擁有塊級作用域({}內)
b.const宣告乙個唯讀的常量,一旦宣告,常量的值就不能改變,同樣也是塊級作用域
c.var宣告的變數不具備塊級作用域,在塊內重新宣告變數也會重新宣告塊外的變數,let不會
var x =10;
//x最終輸出2
var y =10;
;//y最終輸出10
d.在函式體內(外)使用var和let關鍵字宣告的變數類似,作用域都輸區域性(全域性)的
html**中使用全域性變數:
使用var關鍵字宣告的全域性作用域變數屬於window物件
使用let關鍵字宣告的全域性作用域變數不屬於window物件
e. var存在變數提公升(hoisting),支援先使用後宣告,let不行
f. const宣告的變數必須初始化
g. const的本質:const定義的常量並非真正的常量,並非不可變,它定義了乙個常量引用值。使用const定義的物件或者陣列,其實是可變的,從這裡我們可以得出:const宣告的變數不能改變的是它的位址引用,而這個位址上的內容我們是可以修改的。比如:
const car =
;car.color =
'red'
;//這個改變時允許的,而且是可以奏效的
//car = ; //陣列是一樣的,不寫了,能偷懶就偷懶
h. const不存在變數提公升 複習 JS基礎
以下算是經典的入門演算法吧,還記得第一次接觸時,感覺難得要命,現在來看,也不過如此!1 如果今天是星期六,那麼1000天後是星期幾?用一條語句計算出來。var a 1000 7 6 7 alert a 2 使用者輸入乙個三位數,用程式計算三位數字的和。比如 使用者輸入155,就彈出11 使用者輸入3...
JS高階 複習
每個例項物件中都有乙個屬性 proto 是原型,瀏覽器使用的,不標準的屬性 每個建構函式中都有乙個屬性prototype,是原型,程式設計師使用的 物件導向和面向過程都是程式設計思想 物件導向注重的是結果,面向過程注重的是過程 物件導向的特性 封裝,繼承,多型 1.通過原型實現繼承,改變原型的指向,...
JS高階 複習
面向過程和物件導向都是程式設計的思想,方式不一樣 面向過程 凡事都是親力親為,所有的 都要自己寫,每一步都要很清楚,注重的是過程 物件導向 執行者成為指揮者,只要找物件,然後讓物件做相關的事情,注重的是結果 物件導向的特性 封裝,繼承,多型 封裝 就是 的封裝,把一些特徵和行為封裝在物件中 物件導向...