1.物件型別的變數都有默認的__proto__屬性,指向建構式的prototype物件,
我宣告一個簡單的obj變數,用for…in…函式查詢它的屬性,只出現了我自定義的一些屬性,而像__proto__這個默認屬性卻查不出來,這是為什么?
2.宣告函式會自動向函式添加一個prototype屬性,這是否說明函式也是一種物件?如果是的話,函式與普通物件又有什么區別,函式有哪些屬性,寫在函式里的既不像屬性也不像值的代碼又是什么?
uj5u.com熱心網友回復:
1、__proto__首先會在自身的屬性上查找,如果找不到才會沿著原型鏈上查找,你回圈遍歷物件查詢的是自身的屬性。2、函式也是物件沒錯,(function(){}) instanceof Object;//true。函式是沒有屬性的,不信的話你可以console.log(Function.prototype);開后臺看,它所有的屬性和方法都是繼承自Object.prototype。函式和物件的區別在于,只有函式才擁有prototype而物件沒有
uj5u.com熱心網友回復:
__proto__是非列舉屬性,用for…in…只能遍歷出可列舉屬性,非列舉屬性是遍歷不出來的js的函式就是一種Function型別的物件,它的屬性和方法有
function fn(a,b,c) {
return a*b+c;
}
console.log(fn.constructor === Function);//true。說明fn是用Function建構式創建的實體物件
console.log(fn.name);//函式的名稱。
console.log(fn.length);//函式的接收引數個數
Function的物件的常用方法有
.apply()
在一個物件的背景關系中應用另一個物件的方法;引數能夠以陣列形式傳入。
.bind()
bind()方法會創建一個新函式,稱為系結函式.當呼叫這個系結函式時,系結函式會以創建它時傳入 bind()方法的第一個引數作為 this,傳入 bind()方法的第二個以及以后的引數加上系結函式運行時本身的引數按照順序作為原函式的引數來呼叫原函式.
.call()
在一個物件的背景關系中應用另一個物件的方法;引數能夠以串列形式傳入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/94060.html
標籤:JavaScript
