zoukankan      html  css  js  c++  java
  • 有关this的两道问题

    1.var length=10;
    function fn(){
    console.log(this.length);
    }
    var obj = {
    length:5,
    method: function (fn) {
    fn();
    arguments[0]();
    }
    };
    obj.method(fn);
    obj.method(fn, 123);

    打印的结果是10 1 10 1
    分析:这里的obj.method(fn);,将一个函数传入进来, 执行fn()的时候对象变成了全局变量,所以 console.log(this.length)的时候就打印出了全局变量10。 arguments 的对象是arguments对象,arguments[0]指的是mathod函数的第一个对象,即fn,然后执行fn(),所以 console.log(this.length)时
    ,this就是method的函数的参数的个数

    2.function Foo() {
    getName = function () {
    console.log('1');
    };
    return this;
    }
    Foo.getName = function () {
    console.log('2');
    };
    Foo.prototype.getName = function () {
    console.log('3');
    };
    var getName = function () {
    console.log('4');
    };
    function getName() {
    console.log(5);
    }

    Foo.getName();
    getName();
    Foo().getName();
    getName();
    new Foo.getName();
    new Foo().getName();
    new new Foo().getName();

    这个题的结果是:2 4 1 1 2 3 3

    (1)Foo.getName直接有,不会再去进行加载,所以打印出来的是2;

    (2)getName有两个,零级作用域上有两个函数,一个是Foo,一个是getName,由于现在一个是函数表达式,一个是函数声明,函数声明将会提升,然后函数表达式会将其覆盖,所以window上的getNameN函数,最终为var getName = function () {
    console.log('4');
    };所以打印出4

    (3)先执行Foo,将里面隐式的全局函数getName释放,然后返回window对象,所以打印出1,同时将原来零级作用域上的getName函数覆盖。

    (4)打印getName函数,此时的window对象上的getName函数已经覆盖为 getName = function () {
    console.log('1');
    };,所以打印出1;

    (5)new( Foo.getName()) Foo不是函数,所以先执行Foo.getName(),打印出2;

    (6)(new Foo()).getName(); Foo是函数,所以先执行new Foo(),找到原型对象,然后再执行getName(),即执行的是Foo.prototype.getName = function () {
    console.log('3');
    };,所以打印出来为3;

    (7)new((new Foo()).getName())和上一题(6)类似,这里打印出3,然后new 3

  • 相关阅读:
    『奇葩问题集锦』npm install 报错 node-pre-gyp ERR! node-pre-gyp -v v0.6.25
    『奇葩问题集锦』Ruby 切换淘宝源报错WARNING: Error fetching data: SSL_connect returned=1 errno=0 state=SSLv3 read s erver certificate B: certificate verify failed
    一分钟搭建Webpack+react+es6框架
    『奇葩问题集锦』Cannot find module 'webpack/lib/node/NodeTemplatePlugin'
    『奇葩问题集锦』Zepto 页面唤醒拨号功能点透
    webpack面试题(转载)
    手机端样式
    输入框问题
    白色表单隐式边框阴影
    线性渐变css
  • 原文地址:https://www.cnblogs.com/Catherine001/p/7284513.html
Copyright © 2011-2022 走看看