摘要:面向對象精要讀書筆記下面代碼的實際執(zhí)行過程是什么使用原始值和原始封裝類型是有區(qū)別的因為是被解析成一個對象的,所以肯定是真的函數是對象,函數有兩種字面形式,第一種是函數聲明,以關鍵字開頭后面跟函數名字。
Javascript面向對象精要讀書筆記
1、下面代碼的實際執(zhí)行過程是什么?
var name = "fan" var str = name.charAt(0) console.log(str)
var name = "fan" var temp = new String(name) var str = temp.charAt(0) temp = null console.log(temp)
2、使用原始值和原始封裝類型是有區(qū)別的
var flag = new Boolean(false) if(flag){ console.log(flag) }
因為flag是被解析成一個對象的,所以肯定是真的
3、函數是對象,函數有兩種字面形式,第一種是函數聲明,以function關鍵字開頭后面跟函數名字。
function add(){ //... }
第二種形式是將函數作為一個值賦值給變量
var add = function(){ }
函數聲明會被提升到上下文頂部,可以先使用再定義
var result = add() function add(){ //... }
而函數表達式僅能通過變量引用,因此是沒有辦法提升的。所以下面會報錯
var result = add() var add = function(){ //... }
4、函數的length屬性表示該函數的期望參數個數,實現一個函數,求其接受任意數量的參數并返回他們的和
function sum(){ var result = 0, i = 0, l = arguments.length while(i < l){ result += arguments[i] i++ } return result }
5、函數重載的理解,下面的函數輸出什么?并解釋下。
function sayHello(name){ console.log(name) } function sayHello(){ console.log("default msg") } sayHello("fan")
解釋:
var sayHello = new Function("name", "console.log(name)") var sayHello = new Function("console.log("default")") sayHello("fan")
可以利用參數的個數來模擬函數的重載
6、改變函數的this。
1、call()方法
function sayHi(context){ console.log(context + ":" + this.name) } var person1 = { name: "fanchao" } var person2 = { name: "陳冠希" } var name = "小姐姐" sayHi.call(this, "global") sayHi.call(person1, "person1") sayHi.call(person2, "person2")
這里是顯示的指定this的值,并不是讓javascript引擎去自動指定this
2、apply()方法
function sayHi(context){ console.log(context + ":" + this.name) } var person1 = { name: "fanchao" } var person2 = { name: "陳冠希" } var name = "小姐姐" sayHi.apply(this, ["global"]) sayHi.apply(person1, ["person1"]) sayHi.apply(person2, ["person2"])
apply基本上和call的方式是一樣的,就是接受的第二個參數不一樣,是以數組的形式傳入函數的,call是需要有多少就要以展開的方式傳入參數例如:
xxxxFun.call(xxObj, param1,param2,...)
3、bind()方法
bind方法是ECMAscript 5中的方法,和之前的call和apply有點不一樣
function sayHi(context){ console.log(context + ":" + this.name) } var person1 = { name: "fanchao" } var person2 = { name: "陳冠希" } //為person1創(chuàng)建一個方法sayHiPerson1 var sayHiPerson1 = sayHi.bind(person1) sayHiPerson1("person1") // 為person2創(chuàng)建一個方法sayHiPerson2 var sayHiPerson2 = sayHi.bind(person2,"person2") sayHiPerson2() // 因為this已經綁定給了person1,所以name還是person1的 person2.say = sayHiPerson1 person2.say("person2")
sayHiPerson1方法沒有綁定參數,所以自己還是要在調用的時候傳參數
sayHiPerson2不僅綁定了this指向還綁定了第一個參數。參數的綁定類似call方法。
一個好的食用鏈接,給個star唄
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84607.html
摘要:解除引用的最佳手段是將對象變量設置為。字面形式允許你在不需要使用操作符和構造函數顯示創(chuàng)建對象的情況下生成引用值。函數就是值可以像使用對象一樣使用函數因為函數本來就是對象,構造函數更加容易說明。 JavaScript(ES5)的面向對象精要 標簽: JavaScript 面向對象 讀書筆記 2016年1月16日-17日兩天看完了《JavaScript面向對象精要》(參加異步社區(qū)的活動送...
摘要:使用時,會自動創(chuàng)建對象,其類型為構造函數類型,指向對象實例缺少關鍵字,指向全局對象。構造函數本身也具有屬性指向原型對象。 在JavaScript面向對象精要(一)中講解了一些與面向對象相關的概念和方法,這篇講講原型和繼承。 構造函數和原型對象 構造函數也是函數,用new創(chuàng)建對象時調用的函數,與普通函數的一個區(qū)別是,其首字母應該大寫。但如果將構造函數當作普通函數調用(缺少new關鍵字...
摘要:使函數不同于其他對象的決定性特性是函數存在一個被稱為的內部屬性。其中,是一個布爾值,指明改對象本身是否可以被修改值為。注意凍結對象和封印對象均要在嚴格模式下使用。 數據類型 在JavaScript中,數據類型分為兩類: 原始類型:保存一些簡單數據,如true,5等。JavaScript共有5中原始類型: boolean:布爾,值為true或false number:數字,值...
摘要:原文第一章主要介紹的大概情況基本語法。通過和來引用對象屬性或數組元素的值就構成一個表達式。 原文:https://keelii.github.io/2016/06/16/javascript-definitive-guide-note-0/ 第一章 主要介紹 JavaScript 的大概情況、基本語法。之前沒有 JavaScript 基礎的看不懂也沒關系,后續(xù)章節(jié)會有進一步的詳細說明...
閱讀 1711·2021-11-11 10:58
閱讀 4184·2021-09-09 09:33
閱讀 1257·2021-08-18 10:23
閱讀 1548·2019-08-30 15:52
閱讀 1624·2019-08-30 11:06
閱讀 1867·2019-08-29 14:03
閱讀 1507·2019-08-26 14:06
閱讀 2943·2019-08-26 10:39