今天在看阮一峰《ECMAScript 6入门》“Class的基本用法”这一章时,this关键字又引起我的注意,心想,JavaScript中的this和C++中的this一样吗?
我们先来看看传统面向对象语言C++中的this:
#include <iostream>
using namespace std;
class Student
{
public:
Student();
public:
void setname(const char* name);
void setage(int age);
private:
const char* m_Name;
int m_Age;
};
Student::Student()
{
m_Name = "";// this->m_Name = ""
m_Age = 0;// this->m_Age = ""
}
void Student::setname(const char* name)
{
m_Name = name;// this->m_Name = name
}
void Student::setage(int age)
{
m_Age = age;// this->m_Age = age
}
int main()
{
Student* pstu = new Student();
pstu->setname("Greg");
pstu->setage(16);
return 0;
}
我把this写在了注释中,也就是说,在构造函数和成员函数中,既可以写this也可以不写。那什么时候使用this呢?《C++ Primer 6》中介绍“this指针”时,是为了从函数中返回一个对象。
this指针指向用来调用成员函数的对象
另外,如果Student的“年龄”成员也叫age,则需要使用this,不能这样写(编译器分不清):
age = age
《JavaScript高级程序设计》是在介绍Function类型时首次提到this的:
在函数内部,有两个特殊的对象:arguments和this。this引用的是函数执行的环境对象。
这也提现了JavaScript中函数是对象的特点。关于JavaScript中什么场合使用this,可以参考这里。