this(1)

前言:个人随笔,每个JavaScript开发者都需要看看小黄书上册

什么是this?

需要清楚的是,this是函数内部对象

虽然在全局当中也可以使用,但也不会有人把this当成window来使用吧

//常规
window.onload = function () {}
//??
this.onload = function () {}
//要这样写,那就得掀摊子了
onload = function () {}

此处只谈论浏览器环境

回到函数内部,函数内this又是指向谁呢

基本定义谁调用的这个函数,那么this就指向谁

那这个谁到底是谁,绕圈了,主要是对象

那么一个函数在调用时,会是什么情况

fn();// window
function fn() {
    console.log(this)
}

又是window,如果按上述说的基本定义,调用它的对象是window

不过,当一个函数内部使用的this是window时,通常代表着,这里写的不对头。非要用this表示window那只会使代码阅读性,不可描述

对于这一点,在严格模式里也体现了出来,如果函数内部this指向window,那它干脆的,给你换成undefined

那正常对象调用时又是什么样的呢

const dog = {
    name: '小黑',
   	look: function () {
        console.log(this);
    }
}
dog.look();// dog

这里就显然了,一个对象调用了自己的方法,而方法内部的this指向了这个对象

为什么要使用this?

使用一样东西,要么是没得选,要么是它是一样利器

比如varlet

以前我没得选,现在我想当个好人

而this,就是一样利器

那么this的有利点在哪,或者说不使用它会怎么样

根据场景分析

const dog1 = {
    name: '小黑',
    cry: function () {
        console.log(dog1.name + '正在喊叫');
    }
}
const dog2 = {
    name: '小白',
    cry: function () {
        console.log(dog2.name + '正在喊叫');
    }
}
dog1.cry();// 小黑正在喊叫
dog2.cry();// 小白正在喊叫

这一段着实没啥看头,写的太死,要是再加一条,又得一大段重复的

对这一点,使用函数来优化一下过程

function Dog (name) {
    const obj = {};
    obj.name = name;
    obj.cry = function () {
        console.log(obj.name + '正在喊叫');
    }
    return obj;
}
const dog1 = Dog('小黑');
const dog2 = Dog('小白');
const dog3 = Dog('大黄');

再优化一下对象的属性赋值,可以更精简

function Dog (name) {
    const obj = {
        name: name,
        cry: function () {
            console.log(obj.name + '正在喊叫');
        }
    };
    return obj;
}

这时候可以想,能不能把变量obj也给省掉,这不是最后都会返回,这个变量就显得多余

//两数相加
function add1(x, y) {
    const num = x + y;
    return num;
}
//完全可以
function add2(x, y) {
    return x + y;
}

答案是不行,为什么?

因为cry()需要对象的name属性,而没有对象名,就做不到这一点,这就玩不下去了

当然,可以利用函数的参数来完成这点,没问题,就是在使用方法时,还要把自己当作参数传入,虽说在生产函数内部显得简单了,但导致使用方法麻烦了很多

function Dog(name) {
    return {
        name: name,
        cry: function (obj) {
            console.log(obj.name + '正在喊叫');
        }
    }
}
const dog = Dog('小黑');
dog.cry(dog);

不过从这一点来看,似乎可以将属性简化一下,简化啥?函数公用

为什么要使用函数,为了就是多个地方使用同一段代码嘛,现在看一眼,发现这个函数除了输出的name不同以外,其他都是一样的

为什么说要简化,减少消耗

好比WC,是不可能做到每人单独一间,功能都是一样的,那为何不共用一下呢,当然不是说所有都能共用,而是一个例子

function Dog(name) {
    return {
        name: name,
        cry: cry,
    }
}
function cry(obj) {
    console.log(obj.name + '正在喊叫');
}
const dog1 = Dog('小黑');
const dog2 = Dog('小白');

console.log(dog1.cry === dog2.cry);// true
dog1.cry(dog1);// 小黑正在喊叫
dog2.cry(dog2);// 小白正在喊叫

其实已经到了边界点了,这时候想去除这多余的参数,就得请出this

function cry() {
    console.log(this.name + '正在喊叫');
}

这最佳方案便出炉了,很香,就感觉顺理成章,毫无违和感

回到主题,为什么要使用this?

使函数更精简,共用性强,阅读性高

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值