一、實現鏈式操做:javascript
var doSth = { wekup:function(){ console.log("跑步"); return this; }, moorning:function(){ console.log("吃早餐"); return this; }, afternoon:function(){ console.log("上班"); return this; }, evening:function(){ console.log("作飯") } } doSth.wekup().moorning().afternoon().evening(); //跑步、吃早餐、上班、作飯
二、對象枚舉:java
案例一:對象枚舉 for ... in json
var json ={ name:"xiaogen", age: 24, sex: "female", marry: false } for (var key in json){ // console.log(key); // --->屬性名 // console.log(json.key) // ---> 這樣會彈出undefined,由於json.key會被隱式轉換爲 json['key'] ; console.log(key + ':' + json[key]); // ---> name:xiaogen,age: 24,sex: female,marry: false , 這纔是正確的方法 }
案例二:數組
var json = { No1: 'xiaogen', No2: 'gengen', No3: 'xiaogengen', say:function(num){ // console.log(json.No+num) // --> 結果是:NaN 由於json.No不存在,返回undefined console.log(json['No'+num]); // --> gengen 實現拼接時,只能用這種方法,JavaScript } } json.say(2);
案例三 :對象枚舉,hasOwnPropertyapp
function Person(){ this.name = "xiaogen"; this.age = 24; } Person.prototype.sex = "female"; var person = new Person() for(var key in person){ if(person.hasOwnProperty(key)){ console.log(person[key]); //hasOwnProperty 方法只認自己個定義出來的屬性,返回布爾值 } }
案例四:instanceof 判斷一個實例是否屬於某種類型函數
var gen = "xiaogengen"; var arr = [1, 5, 3, 52, 5]; console.log( arr instanceof Array ); // --> true , 使用 instanceof 就是判斷一個實例是否屬於某種類型 console.log( arr instanceof Object ); // -->true ; console.log([] instanceof Object) // -->true ; console.log({} instanceof Object) // --true ; console.log({} instanceof Array) // --flase ;
只要在原型鏈上有重合的,都會返回truethis
案例四: 判斷一個東西是否是數組prototype
var arr = []; var str = Object.prototype.toString.call(arr); if(str === '[object Array]'){ console.log("這是一個數組"); }else{ console.log("這不是一個數組"); }
三、this問題:code
全局this指向window,對象
預編譯階段指向window,
new時,this指向實例化對象
call、apply指向第一個參數
function Test(name){ //var this={ // _prototype_:Test.prototype // } this.name = name } var test = new Test('xiaogen'); // AO = { // this:{ // name:'xiaogen', // _proto_:Test.prototype // } // } // GO = { // Test: function test(){}; // test:{} // }
四、callee和caller
arguments.callee返回被執行的函數
案例一:
function test(a,b,c){ console.log(arguments.callee.length); //返回被執行的函數 console.log(test.length); console.log(arguments.length); } test(1,2);
案例二:
遞歸 function sum(n){ if( n<= 1 ){ return 1; } return n + sum(n-1); } console.log(sum(10)); var sum = (function(n){ if( n <= 1 ){ return 1; } return n + arguments.callee(n-1); })(100) console.log(sum);
caller 返回調用當前函數的函數引用:
function test(){ text(); } function text(){ console.log(text.caller); } test(); //返回值是 function(){ // text() // }