• this指向问题


    使用new 命令所做的几件事

    1、  创建(构建)一个全新对象。

    2、  这个对象会被执行[[原型]]连接

    3、  这个对象会绑定到函数调用this

    4、  如果函数没有返回其对象,那么new 表达式中的函数调用会自动返回这个新对象

    实现过程伪代码:

    1 let obj = new fun();
    2 let temp = {};
    3 temp.__proto__ = fun.prototype;
    4 fun.bind(temp);
    5 obj = return fun() || temp
    6 // fun() 是Object 返回新的对象,否则返回原有对象

    JS中的六大数据类型(Number,String,Boolean,Undefined,null)和一种复杂数据类型(Object)

     

    Null 类型被当作空对象引用,typeof 操作后结果为Object

    更具上面,分析下面案例

    下列案例转载链接:https://www.jianshu.com/p/11583207fb97

    //1

    1 function a() {
    2     var user = "剃了胡子";
    3     console.log(this.user);
    4 }
    5 a();

    //2

    var o = {
        user: "剃了胡子"",
        fn: function () {
            console.log(this.user);
            console.log(this);
        }
    }
    o.fn();

    //3

     1 var o = {
     2     a: 10,
     3     b: {
     4         //a:12,
     5         fn: function () {
     6             console.log(this.a);
     7         }
     8     },
     9     fn1: function () {
    10         console.log(this.a);
    11     }
    12 }
    13 o.fn1();
    14 o.b.fn();

    //4

    1 function fn() {
    2     this.user = '剃了胡子"';
    3     return {};
    4 }
    5 var a = new fn;
    6 console.log(a.user);

    //5

    1 1 function fn() {
    2 2     this.user = '剃了胡子"';
    3 3     return function () {};
    4 4 }
    5 5 var a = new fn;
    6 6 console.log(a.user);

    //6

    1 function fn() {
    2     this.user = '剃了胡子"';
    3     return 1;
    4 }
    5 var a = new fn;
    6 console.log(a.user);

    //7

    1 function fn() {
    2     this.user = '剃了胡子"';
    3     return undefined;
    4 }
    5 var a = new fn;
    6 console.log(a.user);

    //8

    function fn() {
        this.user = '剃了胡子"';
        return null;
    }
    var a = new fn;
    console.log(a.user)

    //9

    var o = {
        a: 10,
        b: {
            a: 12,
            fn: function () {
                console.log(this.a);
                console.log(this);
            }
        }
    }
    var j = o.b.fn;
    j();
    游走大神世界,体验代码魅力
  • 相关阅读:
    写了一个html5音乐播放器
    跨站脚本攻击之反射型XSS漏洞
    org.hibernate.ObjectNotFoundException异常一则
    addEventListener第二个参数的handleEvent
    IE的fireEvent方法
    DexMongoDB索引优化工具
    javascript 位运算符
    javascript contains方法来判断元素包含关系
    将uglifyjs添加到鼠标右键菜单
    过滤XSS(跨站脚本攻击)的函数和防止svn版本库被浏览
  • 原文地址:https://www.cnblogs.com/hongding/p/10917024.html
Copyright © 2020-2023  润新知