码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript的一些记录

时间:2016-03-05 21:50:49      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

1.关于{}与new的区别

var obj = {
    name:‘thunder‘,
    show:function(){
        console.log(this.name);
    }
}
//这种直接写{}的方式与var obj = new Object();是一个效果。
//即{} 是new Object()的简写

2.JavaScript是函数式编程语言,但是它有指针this存在,但它跟java中理解的this不太一样,会跳来跳去,导致难以理解。 

  this指针会指向实例化它的对象,而JavaScript的预处理(预加载)会首先实例化window对象,匿名函数、函数表达式、定义的变量都会实例化到window对象里。可以说window对象是全局环境里的上下文。

  改变this指针的几种方法:new、call、apply

new操作符会执行以下四种动作:

  1.创建一个新对象、2.将构造函数的作用于赋给新对象(this指向它)、3.执行构造函数中的代码、4.返回这个对象(this)

call和apply的作用是一致的,差别在于参数不同(第一个参数都是设定this指向对象的)。它们都可以改变函数的作用域(或者说函数执行的上下文)(可以简单的理解成this指针)。

  call和apply会将this指针指向第一个参数。也就是说A.method.call(B);那么执行的是A的方法method,但是里面的this指针指向的将是B对象。

  有一种比较复杂的场景:

var obj = {
  name:‘thunder‘,
  proxy:function(method){
    console.log(this);  
    method();
  }
}
var name = ‘hello‘;
var fun = function(){
  console.log(this);
  this.cry = function(){
    console.log(this.name+" is crying");
  };
}
<!--
console 中输入:obj.proxy(fun);
打印结果:
Object {name: "thunder"}
Window {external: Object, chrome: Object, document: document, obj: Object, speechSynthesis: SpeechSynthesis…}
hello is crying

可见对象中的方法,proxy中使用的this是指向对象obj的。但是proxy方法中传进来的method方法指向的确实window对象。因为fun方法是在window中加载的,
method只是fun的一个别名而已。其实就是回调。
而如果要使回调函数method执行中的this指向obj对象,可以使用call来调用,即 method.call(this);则method中this的指向就会变成obj对象。
-->

 

JavaScript的一些记录

标签:

原文地址:http://www.cnblogs.com/zaixiuxing/p/5245734.html

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