javascript中this指向问题

    xiaoxiao2025-08-31  53

    javascript中this指向问题

    在对象方法中调用

    在对象方法中this就是指该对象

    var obj = { name: 'xin', getName: function () { return this.name; } }; console.log(obj.getName()); //xin

    作为普通函数调用

    作为普通函数调用时指向全局对象,被全局对象调用指向全局对象,当查找不到this也指向全局对象

    window.name = 'xin'; function getName() { console.log(this.name); } getName(); //xin

    上诉过程就是普通函数的调用也可以看作是全局对象对该函数的一次调用window.getName();

    window.name = "xin"; var myObject = { name: 'bing', getName: function () { return this.name; } }; console.log(myObject.getName()); //bing var newfunc = myObject.getName; console.log(newfunc()); //xin

    虽然上述函数是对象的函数,但是被重新赋值后变成了被全局作用域调用

    <body> <div id="div1">这是一个div</div> </body> <script> window.id = "window"; document.getElementById("div1").onclick = function () { console.log(this.id); //div1 var callback = function () { console.log(this.id); //window }; callback(); } </script>

    在这个例子中,内部函数callback找不到this,就将this指向全局域的window。

    构造器中调用

    构造器this指向创建的对象或明确{}返回的对象

    var myClass = function () { this.name = 'xin'; }; var obj = new myClass(); console.log(obj.name);

    构造器中显示的返回对象

    var myClass = function () { var name = 'xin'; return { name: 'bing' }; }; var obj = new myClass(); console.log(obj.name); //bing

    构造器中返回的不是{}对象,this将明确指向创建对象

    var myClass = function () { this.name = 'xin'; return 'bing'; }; var obj = new myClass(); console.log(obj.name); //xin

    call和apply调用

    call和apply中的this将指向动态传递过来的对象

    var obj1 = { name: 'xin', getName: function () { return this.name; } }; var obj2 = { name: 'bing' }; console.log(obj1.getName()); //xin console.log(obj1.getName.call(obj2)); //bing
    转载请注明原文地址: https://ju.6miu.com/read-1302162.html
    最新回复(0)