js09--函數 call apply

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <script type=text/javascript charset=utf-8>
        var k = 10 ; 
        function test(){
            this.k = 20;
        }
        alert(window.k);//10
        alert(k);//10
        test();//window.test()
        alert(test.k);// undefined
        alert(window.k);//20
        alert(k);//20
        
        var t = new test();
        alert(t.k);//20
        // this:this對象是指在運行時期基於執行環境所綁定的
        // this老是指向調用者,也就是說 誰調用了我 我就指向誰
        </script>
    </head>
    <body>
    </body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <script type=text/javascript charset=utf-8>
        function sum(x , y){
            return x+y;
        }
        function call1(num1 , num2){
            return sum(num1 , num2);//函數能夠嵌套調用
        }
        console.log(call1(1,2));
/* 每個函數都包含兩個非繼承而來的方法:call、apply。把方法動態加在對象上,給對象加一個已有的新方法,代碼的複用。語句執行完對象就沒有這個方法了。
使用call()、aplly()來擴充做用域的最大好處就是對象不須要與方法有任何耦合關係。 */
        //call apply  把方法動態加在對象上,給對象加一個已有的新方法,代碼的複用。簡單的用法:綁定一些函數 用於傳遞參數 調用 
        function sum(x , y){
            return x+y;
        }
        function call1(num1 , num2){
            return sum.call(this , num1 , num2);//調用的方法-call-(對象,參數)
        }
        function apply1(num1 , num2){
            return sum.apply(this , [num1,num2]);
        }
        alert(call1(10 , 20));
        alert(apply1(20,40));

        window.color = 'red';
        var obj = {color:'blue'};
        var obj2 = {color:'yellow'};
        function showColor(){
            alert(this.color);
        }
        showColor.call(window);
        showColor.call(obj);//把方法加在對象上,給對象加一個已有的新方法。
        
        // call方法的簡單模擬與實現
        //function 方法
        function test1(a , b){
            return a+b;
        }
        // 函數名字大寫,表示是類,(規範)
        function Obj(x, y){
            this.x = x ; 
            this.y = y ;
            return x*y;
        }
        var o = new Obj(10 , 20);//return對o沒影響
        o.method = test1 ;
        alert(o.method(o.x , o.y));
        delete o.method;//o不是{}格式,也能夠刪除方法屬性,語句執行完對象就沒有這個方法了
        
        alert(test1.call(o,o.x ,o.y));//語句執行完對象就沒有這個方法了
        
        ===============================================================
        function Obj(x, y){
            this.x = x ; 
            this.y = y ;
            this.say = function(){alert(123);}
            return x*y;
        }
        function test1(a , b){
            return a+b;
        }
        var o = new Obj(10 , 20);//return對o沒影響

        alert(o.x);
        delete o.x;
        alert(o.x);//undefined

        o.say();//123
        delete o.say;
        o.say();//o.say is not a function

        o.method = test1 ;
        alert(o.method(o.x , o.y));//30
        delete o.method;//語句執行完對象就沒有這個方法了
        alert(o.method(o.x , o.y));//o.method is not a function
        </script>
    </head>
    <body>
    </body>
</html>
相關文章
相關標籤/搜索