资讯专栏INFORMATION COLUMN

Node.js this指针指向module.exports、global、实例,指针显式、隐式传

beita / 3123人阅读

摘要:一指针指向全局中的指向的是二指针指向对象在函数中指向的是对象,和全局中的不是同一个对象

一、this指针指向module.exports
console.log("全局中的this指向的是module.exports");
console.log(this); //{}
this.obj = "Hello World";
console.log(this.obj); //Hello World
console.log(global.obj); //undefined
console.log(module.exports.obj); //Hello World
console.log("-------------------------------------------------------" + "

");
二、this指针指向global对象
console.log("在函数中this指向的是global对象,和全局中的this不是同一个对象");
function fn() {
    this.obj = "good good study! day day up!";
}

fn();
console.log(this);//{ obj: "Hello World" }
console.log(this.obj);//Hello World
console.log(global.obj);//"good good study! day day up!"

console.log("-------------------------------------------------------" + "

");
console.log("在函数中this指向的是global对象,和全局中的this不是同一个对象");
function fn1() {
    function fn2() {
        this.msg = "I love you";
    }

fn2();
console.log(this); //global
console.log(this.msg); //"I love you"
console.log(global.msg); //"I love you"

}

fn1();
console.log("-------------------------------------------------------" + "

");
三、在构造函数中this指向的是它的实例,而不是global
function Fn3(){
    this.year = 1998;
}
let fn3 = new Fn3();
console.log(this); //{ obj: "Hello World" }
console.log(fn3.year); //1998
console.log(global.year); //undefined

console.log("-------------------------------------------------------" + "

");
四、this指针显式、隐式传递与绑定
console.log("显式传递this");
let Kirito = {};

function person(name, sex, age, addr, salary) {
    this.name = name;
    this.sex = sex;
    this.age = age;
    this.addr = addr;
    this.salary = salary;
}

//这里的传入Kirito为this指针所指向的对象
//使用.call()进行显式传递
person.call(Kirito, "桐人",
    "男",
    18,
    "SAO",
    999999999);
console.log(Kirito);

console.log("-------------------------------------------------------" + "

");
console.log("隐式传递this");
let Ausua = {
    name: "亚丝娜",
    sex: "女",
    age: 18,
    addr: "SAO",
    salary: 999999999,
    func() {
        console.log(this);
    },
    func_bind: function () {
        console.log(this);
    }.bind("绑定")

};
Ausua.func();

console.log("-------------------------------------------------------" + "

");
console.log("强制绑定this指针");
let func = function () {
    console.log(this);
}.bind(Kirito);

func();
console.log("-------------------------------------------------------" + "

");
console.log("注意:
	这里的func是在原来的对象基础上,使用bind绑定了this指针,产生了新的函数对象!");
func = function () {
    console.log(this);
};

//注意:func此时绑定对象后,func变量的对象引用指针 指向绑定前
func.bind(Kirito);
func();

//注意:func此时绑定对象后,func变量的对象引用指针 指向绑定后
func = func.bind(Kirito);
func();

console.log("-------------------------------------------------------" + "

");
五、this指针显式、隐式传递与绑定的优先级
let priority = function () {
    console.log(this);
};

console.log("绑定优先于隐式");
Ausua.func_bind();
console.log("-------------------------------------------------------" + "

");

console.log("绑定优先于显式");
priority = priority.bind("绑定");
priority.call("显式");
priority();
console.log("-------------------------------------------------------" + "

");

console.log("显式优先于隐式");
Ausua.func.call("显式");
console.log("-------------------------------------------------------" + "

");

console.log("结论:优先级:bind>显示>隐式");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101130.html

相关文章

  • 微信小程序require 引用 BASE64.JS 失败问题的分析解决

    摘要:问题有朋友问微信小程序文件时,会失败分析事实上,微信小程序很多模块都有不兼容现象。。。,被微信小程序初始化时,指针为空,处理避开这类访问。 问题 有朋友问, 微信小程序require (base64.js)文件时,会失败,,, 分析 事实上,微信小程序require很多JS模块都有不兼容现象。。。先从base64.js这个模块入手吧。调试出错点: (function(global) ...

    airborne007 评论0 收藏0
  • This 指针--深思

    摘要:当代码在一个环境中执行时,会创建变量对象的一个作用域链。可以指向不同的运行环境,这里的运行环境本质上指的是对象,可以是内建对象自定义对象或者全局对象。 今天早上看到公众号推送了阮一峰老师的文章JavaScript 的 this 原理,文章不是很长于是研究了一下。 看完自己的总结如下: this this 指向函数运行时所在的环境。 函数运行在对象内,this 就指向该对象 运行在全局...

    ernest.wang 评论0 收藏0
  • 深究JavaScript——函数调用与this详解

    摘要:构造器的目的是要创建一个新对象并对其进行设置,然后将其作为构造器的返回值进行返回,是通过函数调用初始化创建新对象。或方法进行调用通过或调用函数,被调用的函数的指向第一个参数指向的。 this   JavaScript的this总是指向一个对象,而这个对象是基于函数运行时动态绑定的,并非函数声明时绑定。 函数调用方式 作为对象的方法调用 作为普通函数进行调用 作为构造器进行调用 通过a...

    PiscesYE 评论0 收藏0
  • js基础(二):构造函数与原型(看完必懂)

    摘要:写在最前构造函数和原型模式的使用场景很广泛,但因为对概念的混淆不清导致无法熟练掌握。换句话说,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中,比如下面的方法。 写在最前:构造函数和原型模式的使用场景很广泛,但因为对概念的混淆不清导致无法熟练掌握。切图带你从代码和流程图一步步攻克,纯干货,建议收藏详看,原型模式理解图非常重要,务必多看几遍! 前往查看demo源...

    BDEEFE 评论0 收藏0
  • JavaScript函数的call,apply和bind

    摘要:它们有明确的和成员函数的定义,只有的实例才能调用这个的成员函数。用和调用函数里用和来指定函数调用的,即指针的指向。同样,对于一个后的函数使用或者,也无法改变它的执行,原理和上面是一样的。 函数里的this指针 要理解call,apply和bind,那得先知道JavaScript里的this指针。JavaScript里任何函数的执行都有一个上下文(context),也就是JavaScri...

    alighters 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<