244 函数内部的this指向:6种

这些 this 的指向,是当我们调用函数的时候确定的。调用方式的不同决定了this 的指向不同。
一般指向我们的调用者。


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <button>点击</button>
    <script>
        // 函数的不同调用方式决定了this 的指向不同
        // 1. 普通函数 this 指向window
        function fn() {
            // 普通函数的this指向:[object Window]
            console.log('普通函数的this指向:' + this);
        }
        window.fn();

        // 2. 对象的方法 this指向的是对象 o
        var o = {
            sayHi: function() {
                // 对象方法的this指向:[object Object]
                console.log('对象方法的this指向:' + this);
            }
        }
        o.sayHi();

        // 3. 构造函数 this 指向 ldh 这个实例对象 原型对象里面的this 指向的也是 ldh这个实例对象
        function Star() {
            this.dancing = function() {
                // 构造函数的this指向:[object Object]
                console.log('构造函数的this指向:' + this);
            }
        };
        Star.prototype.sing = function() {
            // 构造函数的原型对象的this指向:[object Object]
            console.log('构造函数的原型对象的this指向:' + this);
        }
        var ldh = new Star();
        ldh.dancing();
        ldh.sing();

        // 4. 绑定事件函数 this 指向的是函数的调用者 btn这个按钮对象
        var btn = document.querySelector('button');
        btn.onclick = function() {
            // 绑定时间函数的this指向:[object HTMLButtonElement]
            console.log('绑定时间函数的this指向:' + this);
        };

        // 5. 定时器函数 this 指向的也是window
        window.setTimeout(function() {
            // 定时器的this指向:[object Window]
            console.log('定时器的this指向:' + this);
        }, 1000);

        // 6. 立即执行函数 this还是指向window
        (function() {
            // 立即执行函数的this指向:[object Window]
            console.log('立即执行函数的this指向:' + this);
        })();
    </script>
</body>

</html>

原文地址:https://www.cnblogs.com/jianjie/p/12229344.html

时间: 2024-10-15 11:34:45

244 函数内部的this指向:6种的相关文章

改变javascript函数内部this指针指向的三种方法

在查了大量的资料后,我总结了下面的三条规则,这三条规则,已经可以解决目前我所遇到的所有问题.规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量. function a() { alert(this); } 或者 var a = function() { alert(this); } 都可以认为是创建了一个变量,这个变量的值就是一个函数. 规则1:如果一个函数,是某个对象的key 值,那么,this就指向这个对象. 这个规则很好理解: var a = function(obj) { a

245 改变函数内部 this 指向:call,apply,bind,call、apply、bind 三者的异同

2.2.1 call方法 call()方法调用一个对象,简单理解为调用函数的方式,但是它可以改变函数的 this 指向 应用场景: 经常做继承. var o = { name: 'andy' } function fn(a, b) { console.log(this); console.log(a+b) }; fn(1,2) // 此时的this指向的是window 运行结果为3 fn.call(o,1,2) //此时的this指向的是对象o, 参数使用逗号隔开, 运行结果为3 以上代码运行结

JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域

JS:客户端(浏览器)脚本语言 弱类型 基于原型 事件驱动 不需要编译(直接运行) JS的作用:表单验证,减轻服务端的压力 添加页面动画效果  动态更改页面内容  Ajax网络请求 (一)常见的对话框 alert()对话框:该方法是window对象的方法,在浏览器中弹出一个对话框(该方法没有返回值)  prompt()对话框:2个参数,一个是浏览器提示信息,第二个是默认的输入框的值,返回值就是输入框的信息  confirm()对话框:在浏览器弹出一个对话框,用户只能选择正确或者取消,返回值对应为

2、函数内部属性 arguments是类数组对象,主要用途是保存函数参数,但这个对象中有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数

例如:(1).function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }//此时是递归算法 var trueFactorial=factorial;//将factorial复制给trueFactorial factorial=function(){ return 0; }//覆盖factorial函数 alert(trueFactorial(5));//0;因为辞职factorial

函数内部的函数中的this都是指向window

刚看到一个问题关于this的, 1 var name="the window"; 2 var object={ 3 name:"silence", 4 packname:function(){ 5 return this.name; 6 } 7 } 8 console.log(object.packname()); 一般而言,在Javascript中,this指向函数执行时的当前对象.这个this指object.输出结果为 silence 改变一下 1 var na

改变函数中的 this 指向——神奇的call,apply和bind及其应用

在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这三个方法进行详细的讲解,并列出几个经典应用场景. 1.call(thisArgs [,args...]) 该方法可以传递一个thisArgs参数和一个参数列表,thisArgs 指定了函数在运行期的调用者,也就是函数中的 this 对象,而参数列表会被传入调用函数中.thisArgs 的取值有以下4

函数中的this的四种绑定形式

目录 this的默认绑定 this的隐式绑定 隐式绑定下,作为对象属性的函数,对于对象来说是独立的 在一串对象属性链中,this绑定的是最内层的对象 this的显式绑定:(call和bind方法) new绑定 正文 javascript中的this和函数息息相关,所以今天,我就给大家详细地讲述一番:javascript函数中的this 一谈到this,很多让人晕晕乎乎的抽象概念就跑出来了,这里我就只说最核心的一点--函数中的this总指向调用它的对象,接下来的故事都将围绕这一点展开   (提醒前

【javascript】函数中的this的四种绑定形式

目录 this的默认绑定 this的隐式绑定 隐式绑定下,作为对象属性的函数,对于对象来说是独立的 在一串对象属性链中,this绑定的是最内层的对象 this的显式绑定:(call和bind方法) new绑定 正文 javascript中的this和函数息息相关,所以今天,我就给大家详细地讲述一番:javascript函数中的this 一谈到this,很多让人晕晕乎乎的抽象概念就跑出来了,这里我就只说最核心的一点--函数中的this总指向调用它的对象,接下来的故事都将围绕这一点展开   (提醒前

javascript——函数内部属性

1 <script type="text/javascript"> 2 //在函数内部有两个特殊的属性:arguments 和 this.arguments是一个类数组对象,包含传入的所有参数, 3 //但是这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数. 4 //请看经典的阶乘函数例子: 5 function Factorial(num) { 6 if (num <= 1) { 7 return 1; 8 } el