博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js this指针指向module.exports、global、实例,指针显式、隐式传递与绑定与优先级...
阅读量:6757 次
发布时间:2019-06-26

本文共 3030 字,大约阅读时间需要 10 分钟。

一、this指针指向module.exports

console.log("全局中的this指向的是module.exports");console.log(this); //{}this.obj = "Hello World";console.log(this.obj); //Hello Worldconsole.log(global.obj); //undefinedconsole.log(module.exports.obj); //Hello Worldconsole.log("-------------------------------------------------------" + "\n\n");

二、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 Worldconsole.log(global.obj);//"good good study! day day up!"console.log("-------------------------------------------------------" + "\n\n");
console.log("在函数中this指向的是global对象,和全局中的this不是同一个对象");function fn1() {    function fn2() {        this.msg = "I love you";    }fn2();console.log(this); //globalconsole.log(this.msg); //"I love you"console.log(global.msg); //"I love you"}fn1();console.log("-------------------------------------------------------" + "\n\n");

三、在构造函数中this指向的是它的实例,而不是global

function Fn3(){    this.year = 1998;}let fn3 = new Fn3();console.log(this); //{ obj: 'Hello World' }console.log(fn3.year); //1998console.log(global.year); //undefinedconsole.log("-------------------------------------------------------" + "\n\n");

四、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("-------------------------------------------------------" + "\n\n");
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("-------------------------------------------------------" + "\n\n");
console.log("强制绑定this指针");let func = function () {    console.log(this);}.bind(Kirito);func();console.log("-------------------------------------------------------" + "\n\n");
console.log("注意:\n\t这里的func是在原来的对象基础上,使用bind绑定了this指针,产生了新的函数对象!");func = function () {    console.log(this);};//注意:func此时绑定对象后,func变量的对象引用指针 指向绑定前func.bind(Kirito);func();//注意:func此时绑定对象后,func变量的对象引用指针 指向绑定后func = func.bind(Kirito);func();console.log("-------------------------------------------------------" + "\n\n");

五、this指针显式、隐式传递与绑定的优先级

let priority = function () {    console.log(this);};console.log("绑定优先于隐式");Ausua.func_bind();console.log("-------------------------------------------------------" + "\n\n");console.log("绑定优先于显式");priority = priority.bind("绑定");priority.call("显式");priority();console.log("-------------------------------------------------------" + "\n\n");console.log("显式优先于隐式");Ausua.func.call("显式");console.log("-------------------------------------------------------" + "\n\n");console.log("结论:优先级:bind>显示>隐式");

转载地址:http://ygweo.baihongyu.com/

你可能感兴趣的文章
什么是面向对象思想
查看>>
Quick-cocos2d-x3.3 Study (十六)--------- 碰撞检测,事件监听,设置掩码
查看>>
tomcat 安装
查看>>
C#调用c++创建的dll
查看>>
12.02个人博客
查看>>
Notification通知代码简洁使用
查看>>
UIView 动画
查看>>
ssh加密公私钥
查看>>
快速部署Python应用:Nginx+uWSGI配置详解
查看>>
mybatis-generator生成数据对象
查看>>
java Queue中 add/offer,element/peek,remove/poll区别
查看>>
一个继承了抽象类的普通类的执行顺序
查看>>
Map集合中key不存在时使用toString()方法、valueOf()方法和强制转换((String))之间的区别...
查看>>
ArcIMS 开发学习笔记(一)
查看>>
leetcode_1095. Find in Mountain Array_[Binary Search]
查看>>
关于搭建haddoop分布式系统的全部过程复习
查看>>
简单使用SOCKET,TCP,UDP模式之间的通信
查看>>
js历史返回
查看>>
JavaWeb之JavaMail
查看>>
430. Flatten a Multilevel Doubly Linked List - Medium
查看>>