1,函式包含一組語句,用於指定物件的行為,函式也是物件,也稱函式物件。函式物件連線到function.prototype(該原型物件本身連線到object.prototype)
每個函式都有乙個prototype屬性,它是乙個物件,乙個擁有constructor屬性且值為該函式本身的乙個物件。和物件的原型鏈不是一回事。
但是這個prototype將來會被多個該function的例項所繼承(或者說該物件處於多個例項的原型鏈上);__proto__才是真正的原型鏈的實際指標,然而許多瀏覽器並不對外公開這個屬性
function foo(){};
var f1 = new foo();
f1.__proto__===foo.prototype //true
foo.__proto__===function.prototype //true
function.prototype.__proto__===object.prototype //true
object.__proto__===function.prototype //true
object.prototype.__proto__ //null
2,函式建立包括函式字面量(包括函式宣告與函式表示式)與new function()(函式構造器)兩種方式。
var a = 9;
(function())(); ----9 uncaughtreferenceerror: b is not defined
一般的函式宣告與表示式能訪問到外函式的變數,但function拿不到,這就是function少使用的乙個原因。
函式宣告,函式表示式(立即執行函式表示式,匿名函式表示式,命名函式表示式),
(function()
})(); -------hello
(function() --匿名函式表示式
})(); uncaught typeerror:undefined is not a function
看程式寫結果:
myname ="global"; // 全域性變數
function func()
func();
函式宣告會前置!變數宣告也會前置。但變數前置宣告為undefined
命名函式表示式。(應用於除錯時呼叫棧) ----- 不常用
var foo=function too(){}
foo===too
ie6~8
:false chrome/ie9
:too is undefined
三種函式建立方式的比較:
函式宣告
函式表示式
函式構造器
前置會前置
不會前置
不會前置
允許匿名
不允許允許
沒有函式名
立即呼叫
不可以可以
可以在定義該函式的作用域通過函式名訪問可以
3, 一般無return 的話返回undefiend,如果作為構造器,無return或返回基本型別,則返回this。
4, 函式的呼叫與this:
a,方法呼叫模式:myobject.foo();
----this指向呼叫者物件上,
b,函式呼叫模式:foo();
----this指的全域性物件
c,構造器呼叫模式
----使用new來呼叫構造器,將建立乙個連線到該函式的prototype成員的新物件,同時this會被繫結到這個新物件上
----this會作為第乙個引數傳入,如果傳入null/undefined,方法中的this會指向全域性物件,而在嚴格模式下,this就指向null/undefined。
了解es5提供的bind方法:
functionf()
var g = f.bind();
console.log(g());
2 JS輸出日期
得到時間方法 getdate 檢視date物件並返回日期 getday 返回星期幾 gethours 返回小時數 getminutes 返回分鐘數 getmonth 返回月份值 getseconds 返回秒數 gettime 返回完整的時間 getyear 返回年份 設定時間方法 setdate 改...
Js簡介2 js常見問題
1.區分大小寫 js中方法和變數是區分大小寫的,如 function myfunction 和function myfunction 是不一樣的。2.單引號,雙引號 單引號,雙引號在js中沒有特殊區別,都可以用來建立字串。但作為一般性規則,大多數js開發人員使用單引號。因為xhtml規範要求所有屬性...
2 ,JS之 if 條件語句
語法 expression sentence1 sentence2 解釋 當expression的結果為true時,執行sentence1,為false時,執行sentence2 例子 var a true 條件成立時執行此句 條件不成立時執行此句 console.log a 結果為 條件成立時執行...