javascript高級課程:鏈式調用,對象深刻,this,caller,callee

一、實現鏈式操做: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()
 //  }
相關文章
相關標籤/搜索