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的一些记录的主要内容,如果未能解决你的问题,请参考以下文章

代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?

Node.js JavaScript 片段中的跳过代码

提效小技巧——记录那些不常用的代码片段

拾遗理解Javascript中的Arguments

在jQuery和JavaScript中,实现转跳

VSCode自定义代码片段12——JavaScript的Promise对象