一点思考

JavaScript函数中的this指代的是全局变量,那构造函数呢?

测试代码如下:

1. 当做一般函数调用Cat();

function Cat(name){
  var arr = Object.getOwnPropertyNames(this);
  console.log(arr.length);               // 722
}

Cat("Black Cat");

arr.length=722,我们判定调用一般函数时,this指代的是全局对象。

2. 当做构造函数调用;

function Cat(name){
  var arr = Object.getOwnPropertyNames(this);
  console.log(arr.length);
}

var cat = new Cat("Black Cat");

array.length = 0, 我们判定调用构造函数时,this指定的是new出来的那个对象。

总结:对于this值,JavaScript权威指南中是这样表述的——函数调用中,调用上下文(this的值)是全局对象或undefined;方法调用中,调用上下文(this的值)为调用方法的对象。

构造函数=构造函数.prototype.constructor,因此,构造函数是方法 ~ 

apply()和call()

聊天记录

那为什么apply()方法第一个参数可以传入null 呢?
是这样  这个函数的第一个参数 如果没指定 就会指定为全局对象

第一参数是必须传的,不传会报错,想传,但不想给值,所以就传个null.  这个既能通过js语法的验证,又能达到逻辑任务的目的。是一箭双雕的活。

如果指定,那这个方法的this就是指向那个指定的,如果没有,或传的null,那就是windows,js里边最大的带头大哥就是这货。
 .call表明上是调了一个方法,其实隐式的意思是改变了调用方法后的this指向。这是关键。
 如果搞不懂,就先多写写代码,尝试了解js语言的灵活性,从其它侧面了解this的威力,然后回头在看就不是这么困难了,豁然开朗就是说这种情况的。
 为什么要改变this的指向,为什么能改变?这就是语言本身的灵活。改变之后有什么好处?先写写其它的代码,了解js的全局观。从大处着眼,小处研究。然后回头在来弄。
call基本就是借方法 你不说谁借的就当是全局对象借的.
 null 或者不传 本质就是Global 浏览器上就是window.

一点发现

在函数中,如果函数参数是变量argument时,好像无法直接调用函数,只能使用apply的副作用?

为什么要使用apply()和call()

原文地址:https://www.cnblogs.com/linxd/p/4437726.html