码迷,mamicode.com
首页 > 其他好文 > 详细

一点思考

时间:2015-04-18 19:03:45      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

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出来的那个对象。

 

apply()和call()

聊天记录

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

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

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

一点发现

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

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

一点思考

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!