javascript 中的this call apply

直接上代码,有注释,其中有参考其他人的内容

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>js中this的学习</title>
    <script type="text/javascript">
        //测试在对象的方法中使用this
        var test = {
            name: "xuexi",
            getName:function(){
                console.log(this === test);// 这其中的this被对象test的方法getName调用,this指的是test对象
                console.log(this.name);
            }
        };
        test.getName();//true,xuexi

        // 测试在普通方法中使用this
        window.name = "testthis";
        var testFun = function(){
            console.log(this.name); // 这里的this被方法testFun调用,指的的全局对象
        };
        testFun();// testthis

        //测试在对象的构造方法使用this
        var testClass = function(){
            this.name = "a";// 这里的this被testClass对象调用,指的是testClass对象本身
        };

        var classobj = new testClass();
        console.log(classobj.name);// a
        console.log(classobj); // Object { name: "a" }

        // 测试在加入return时的this是否还有作用
        var testClass2 = function(){
            this.name = "this_name";
            return{
                name:"return_name"
            }
        };
        var classObj2 = new testClass2();
        console.log(classObj2.name); //return_name
        console.log(classObj2); //Object { name: "return_name" }
        // 从结果可以看出当有return是this 就失去了作用
    </script>
</head>
<body>
js中this的学习
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>js中的call方法学习</title>
</head>
<body>
js中的call方法学习
<input type="text" id="myTest" value="input text"/>
</body>
</html>
<script type="text/javascript">
    // call 方法用于改变对象的内部指针,即改变this指向的对象
        var obj = function(){
            this.value = "对象!"; // 这里的this指的是obj对象本身
        }
        var objTest =new obj();
        console.log(objTest.value); // 对象!

        var window.value = "global 变量";
        var Fun1 = function(){
            alert(this.value);
        }
        Fun1();// global 变量 方法Fun1中this指向的是全局对象即 window

        Fun1.call(window); //global 变量 这里用window替换原来的window 故结果不变
        Fun1.call(document.getElementById("myTest")); //input text 这里使用id为"mtTest"的input元素替代原来的window对象,故结果为 input元素的值 "input text"
        Fun1.call(objTest);//  对象! 这里使用obj对象替代window对象 故结果为obj 对象的value的值
    </script>
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
        var func = new function(){ //匿名行数对象
            this.a = "functest";
        }
        var myfunc = function(x){
            var a = "myfunc";
            alert(this.a);
            alert(x);
        }

        myfunc.call(func,"vartest");
        // 第一个参数是传递给当前对象用来替换this的对象,第二个或以后的参数是传递给当前对象的参数
        //apply 方法和call方法的第一个参数都是传递给当前对象的对象,不同的是call方法传递给当前对象的参数是一个一个的
        //而 apply方法传递给当前对象的参数是一个数组
    </script>
</head>
<body>

</body>
</html>
如有错误之处,请不吝指正,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值