ExtJS 中为什么要使用“var me=this”这样的写法

JavaScript025

ExtJS 中为什么要使用“var me=this”这样的写法,第1张

首先,不知道你懂this代表的是什么不?另外一个还要理解,js中的函数其实也是个对象!再一个要知道,作用域的问题。

有这三块知识就好办,this这种用法,不单单是在ext中我们自己写的js对象,其他js框架中也很常见。目的只有一个,在嵌套的函数或对象或方法中,可以再应用到当前对象,this是代表当前对象。因为你代码块要跳出了当前的作用范围,再用this指针应用不到你真正想引用的对象。说例子:

var setValue = function() {

this.value = "current value"

var me = this

//嵌套函数中的 this指针代表remove函数自己

//me代表使用setValue这个函数的对象或setValue自己(js有这种特性,你把setValue复制给某个对象的属性,this指的是该对象)

function remove() {

console.log(me)

console.log(this)

me.value="remove current value"

}

remove()

}

绕来绕去不知道你明白没有?

简单的说:

第一种是构造函数式,即通过new运算符调用构造函数Function来创建函数

第二种不是实例化,只是调用函数把返回值赋给变量。

扩展:

JavaScript 中并没有真正的类,但JavaScript 中有构造函数和new 运算符。构造函数用来给实例对象初始化属性和值。任何JavaScript 函数都可以用做构造函数,构造函数必须使用new 运算符作为前缀来创建新的实例。

new 运算符改变了函数的执行上下文,同时改变了return 语句的行为。实际上,使用new和构造函数很类似于传统的实现了类的语言:

// 实例化一个Me

var alice = new Me('alice', 18, 'Coder')

// 检查这个实例

assert( alice instanceof Me )

构造函数的命名通常使用驼峰命名法,首字母大写,以此和普通的函数区分开来,这是

一种习惯用法。

// 不要这么做!

Me('alice', 18, 'Coder')//=>undefined

这个函数只会返回undefined,并且执行上下文是window(全局)对象,无意间创建了3个全局变量name,age,job。调用构造函数时不要丢掉new 关键字。

当使用new 关键字来调用构造函数时,执行上下文从全局对象(window)变成一个空的上下文,这个上下文代表了新生成的实例。因此,this 关键字指向当前创建的实例。尽管理解起来有些绕,实际上其他语言内置类机制的实现也是如此。

默认情况下,如果你的构造函数中没有返回任何内容,就会返回this——当前的上下文。

要不然就返回任意非原始类型的值.