下面我就為大家帶來一篇淺談JavaScript函數的四種存在形態。現在就分享給大家,也給大家做個參考。
函數的四個存在形態:
1.函數形態
2.方法形態將函數賦值給某一個物件的成員,那麼就稱為方法
3.建構器形態
4.上下文形態
1.函數形態:
#var foo = function() { alert(this); //this是window };
2.方法形態:
o = {}; o.foo = foo; //将函数foo赋值给对象o的foo属性 o.foo(); //弹出的是object,此时的this表示object
var lib = { test:function() { alert(this); //此处的this表示object(lib对象本身) //var that = this; //要想匿名函数中this表示lib对象,可以这样 (function() { alert(this); //此处的匿名函数不属于lib对象,所以this的任然表示window })(); } }; lib.test();
#3.建構子(建構子)var p = new Person();
# #1、new創建了對象,並開闢了空間
2、將對象的引用地址傳遞給函數,在函數中用this接收
3、構造方法執行結束,返回this
var Person = function() { this.age = 19; this.name = "Mr靖"; return "{}"; }; var p = new Person(); alert(p.name); //弹出的是undefined,由于函数返回的是一个对象,所以直接将这个对象返回给person,而忽略age,name属性
var Person = function() { this.age = 19; this.name = "Mr靖"; return 123; }; var p = new Person(); alert(p.name); //弹出“Mr靖”,由于返回值不是对象,所以直接忽略返回值 alert(p); //弹出object
改變的東西有:建構函數改變了函數的返回值;如果函數的返回值是一個對象,那麼就按照返回值來返回;如果返回值不是一個對象就忽略返回值,直接傳回this;
4.上下文呼叫模式函數.apply(物件, [參數清單])
var foo1 = function(a, b) { alert(this); return a > b ? a : b; }; var num = foo1.apply(null, [112, 34]); //此时foo1是函数形态,this表示window num = foo1.apply({}, [112, 34]); //此时foo1是方法形态,this表示参数中传入的对象{}
函數.call(物件, 參數列表);
var num1 =foo1.call(null,112,34); num1=foo1.call({},112,34); //除了参数列表外,其余和apply一样
上面是我整理給大家的,希望今後會對大家有幫助。
相關文章:
以上是詳細解讀JavaScript函數的四種存在形態(圖文教學)的詳細內容。更多資訊請關注PHP中文網其他相關文章!