JavaScript的一些记录
Posted 在修行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript的一些记录相关的知识,希望对你有一定的参考价值。
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的一些记录的主要内容,如果未能解决你的问题,请参考以下文章