美文网首页
方法中this和函数中的this

方法中this和函数中的this

作者: 木中木 | 来源:发表于2019-09-30 08:37 被阅读0次

本文旨在阐述this指针在不同场景中的指向

this一般情况分以下四种:

    1.构造函数中,返回当前创建的对象

`

class Person {

constructor(){

    console.log(this)

}

}

const p = new Person()

Person {}

`

这里一起说明下new操作,new操作符其实做了四个步骤,

    ①创建一个新对象

    ②将当前作用域指向这个心对象,也就是绑定this

    ③初始化构造函数操作

    ④返回一个新对象

可以使用native function来实现

`

function ConstruFunc(name, age) {

    const obj = {};

    obj.__proto__ = Person.prototype;

    obj.name = name;

    obj.age = age;

    return obj;

}

let person2 = ConstruFunc('maclery', 29);

console.log(person2);

输出:

    Person {name:"maclery",age:29}

        age: 29

        name: "maclery"

        __proto__: Object

`

2.作为对象的属性调用——谁调用指向谁

`

const name = 'zhangsan';

const objFunc = {

    name: 'maclery',

    getName: function() {

        return this.name;

    }

}

console.log(objFunc.getName())  // 输出: maclery

如果使用
    const getName = objFunc.getName;

    console.log(getName()) // 输出:zhangsan,此时this指向window,相当于window.getName();这个是下面要说的自由函数

`

3.自由函数调用

var name = 'zhangsan';

function getName() {

    var name = 'maclery';

    console.log(this.name);

}

getName(); // 输出 ‘zhangsan’

这里指向 window,在严格模式中,则是undefined

`

var name = 'zhangsan';

function getName() {

    'use strict'

    var name = 'maclery';

    console.log(this.name);

}

getName(); //直接报错

VM1631:8 Uncaught TypeError: Cannot read property 'name' of undefined

    at getName (<anonymous>:8:22)

    at <anonymous>:12:1

`

这里自由函数调用,还包含定时器调用、函数内嵌套调用,以及对象函数内嵌套函数调用,在未明确说明this时,都是指向window

`

const name = 'linjian';

const obj = {

    name: 'maclery',

    getName: function() {

        function temp() {

            console.log(this.name)

        }

        temp();

        setTimeout(function(){

            console.log(this.name)

        },0);

    }

}

obj.getName()

输出 zhangsan

函数内嵌套:

    const name = 'zhangsan';

    function getName() {

        const name = 'maclery';

        function innerGetName() {
            console.log(this.name);

        }

        innerGetName();

    }

    getName();

    // 输出 ‘张三’

`

4.事件绑定方法——总是指向当前被绑定事件的对象

`

const obj = document.querySelector('#name');

obj.addEventListener('click',function() {
    console.log(this);// 指向 obj

})

`

5.箭头函数

   普通函数的箭头函数是在执行过程中,绑定this,并且总是指向父级this,箭头函数使用apply,call、bind无法改变this指向

`

const name = 'maclery'

const obj = {

    name:'linjian',

    getName: () =>{

        console.log(this.name)

    }

}

obj.getName(); // 输出:maclery

`

    

相关文章

  • 方法中this和函数中的this

    本文旨在阐述this指针在不同场景中的指向 this一般情况分以下四种: 1.构造函数中,返回当前创建的对象 ...

  • Scala中的函数和方法

    方法是对象中的一个方法函数是一个对象对象就有一些对应的方法 //函数中自带的一些方法(f1是一个函数)scala>...

  • function 函数类型之prototype

    prototype 和 length 函数的属性和方法 ECMAScript 中函数是对象,因此也有属性和方法。每...

  • Java 1.8 学习笔记

    java中重要的函数接口 stream 中的 filter 方法和 count 方法 filter 方法并未做什么...

  • 02Dart:并不支持构造函数的重载

    Java 代码中,使用了重载构造函数的方法,该方法在 Java 中很普遍,重载的构造函数和之前的构造函数具有相同的...

  • 原型和原型链(javascript)

    使用对象---->使用对象中的属性和对象中的方法,使用对象就要先有构造函数构造函数

  • Swift超基础语法(函数篇)

    函数 定义函数的格式 Swift中的函数与OC中的方法比较相似,其格式如下: Swift中的函数相比于OC方法更为...

  • function详解

    1、函数的基础操作 函数指实现某一个功能的方法,也叫子程序,OOP中的方法JS中函数有两部分:创建函数和执行函数创...

  • 【JavaScript笔记】JavaScript中this的使用

    JavaScript中this的调用方式 1)在方法中调用【注意 方法中声明函数,同时在函数中再调用this】2)...

  • Python 中函数和方法的区别

    实例化出来的去调用,叫做方法. 直接使用类名去调用,叫做函数. 注意,这只是在 python3 中才有的区分,py...

网友评论

      本文标题:方法中this和函数中的this

      本文链接:https://www.haomeiwen.com/subject/wulxuctx.html