这个关键字在C++和java提供。刚开始学起来很难,但听懂了就容易多了。下面是js中这个关键字理解的
详细说明。
关于这个,是很多面试的必修科目,有时候在网上看到这些题目,他试过,嗯,真的错了!在实际开发中,我们也会遇到这样的问题(虽然有些类库会帮助我们)。例如,当我们使用某些框架,例如,击倒,我们有时不明白为什么我们不直接使用它,但我们需要导入这个作为
参数。
然后你谈谈我对它的理解,也作为一个说明,方便以后
参考。
1。不像C #,这必须指向当前对象。
js的方向是不确定的,也就是说,它可以动态地改变。
2。一般来说,这是
函数的拥有者。
这是非常重要的!这是非常重要的!这是非常重要的!
这也是一个常见的面试问题,下面的代码:
var = 1;
var obj = { {
编号:2,
shownumber:函数(){
this.number = 3;
(函数(){())
console.log(这个数字);
});
console.log(这个数字);
}
};
Obj.showNumber();
因为这shownumber
方法业主obj,这个数= 3;这一点,对象
属性数。
以同样的方式,第二console.log
打印也是属性数。
为什么第二点说,一般来说,这是函数的拥有者,因为有一个特殊的
情况,函数的自
执行是一个特殊的情况。在一个函数的自我执行,这一点:窗户。所以第一console.log打印窗口的属性、数量。
所以加一点:
三.在函数的自执行中,这指向窗口对象。
扩展,关于这个,一个模糊的地方是在DOM事件中,通常有以下3个例子:
如下:
1。使用标签属性
注册事件,此时指向窗口对象。
函数测试(){警报(此)}
2。对于1,让这个点
输入,可以作为参数传递。
三.使用addEventListener等登记。在这一点上,这也点输入。
document.getelementbyid(测试),AddEventListener(单击
在面向对象的编程
语言,我们与这个关键词非常熟悉。例如,C++,C和java #提供这个关键词。虽然很难在开始
学习,这是非常方便的去理解它,只要是understood.javascript也提供这个关键词的意义,更是糊涂比经典的面向对象的语言。
让我们看看,在Javascript中使用各种各样的东西有什么困惑
1,在HTML元素事件属性中,内联方法使用这个关键字:
你可以在里面使用这个
>除法元素
你可以在里面使用这个
>除法元素
我们常用的方法是使用:Javascirpt:EventHandler(本),在这种形式。但在这里你可以写任何合法的Javascript语句,如果你是幸福的定义一个类,在这里,你可以(但这将是一个内部类)。这里的原则是,
脚本引擎生成一个div实例对象匿名成员方法,和事件点的方法。
2,在DOM的事件
处理函数中使用这个关键字:
分元
var div = document.getelementbyid('elmtdiv);
div.attachevent('onclick ',EventHandler);
Function EventHandler ()
{
使用此
}
分元
var div = document.getelementbyid('elmtdiv);
div.attachevent('onclick ',EventHandler);
EventHandler()函数
{
使用此
}
这是该关键词在EventHandler()方法,说明对象的IE,这是因为
处理器只是一个普通的函数的窗口对象,并attachevent,脚本引擎无关的div对象本身的电话。同时,你可以看看EventHandler对方的财产,这等于零。如果我们想在这个方法得到的div对象的引用,应使用:this.event.srcelement。
3、在事件处理函数的这个关键词使用DHTML:
分元
lt;MCE:脚本语言=javascript>
var div = document.getelementbyid('elmtdiv);
div.onclick =
功能()
{
使用此
};
分元
var div = document.getelementbyid('elmtdiv);
div.onclick =功能()
{
使用此
};
这个关键字的内容是div元素对象实例。在剧本中,DHTML是用来指定一个EventHandler到div.onclick直接,即div对象实例添加一个成员方法。这种方法和第一种方法的
区别在于,第一种方式是使用HTML的方式,这里是DHTML方式。后一个脚本分析引擎将不再生成匿名方法。
4。在类定义中使用此关键字:
JSClass()函数
{
VAR我= 'jsclass;
this.m_name = 'jsclass;
}
jsclass.prototype.tostring =功能()
{
警报(
名字+,+ this.m_name );
};
VaR JC =新JSClass();
Jc.ToString();
JSClass()函数
{
VAR我= 'jsclass;
this.m_name = 'jsclass;
}
jsclass.prototype.tostring =功能()
{
警报(名字+,+ this.m_name );
};
VaR JC =新JSClass();
Jc.ToString();
这是本在Javascript
模拟类定义的使用,这是其他面向对象语言非常熟悉。但它要求成员属性和方法必须使用this关键字引用,和上面的
程序会告诉我是没有定义的。
5,在脚本引擎的内部对象中添加原始方法中的这个关键字:
function.prototype.getname =功能()
{
无功fnname = this.tostring();
fnname = fnname.substr(0,fnname.indexof('));
fnname = fnname.replace( / / ^功能,);
返回(fnname.replace /(^ +)|( + $ / g),);
}
函数(富){ }
警报(foo.getname());
function.prototype.getname =功能()
{
无功fnname = this.tostring();
fnname = fnname.substr(0,fnname.indexof('));
fnname = fnname.replace( / / ^功能,);
返回(fnname.replace /(^ +)|( + $ / g),);
}
函数(富){ }
警报(foo.getname());
这里引用的是类添加到原始的实例,类似于4类定义,没有什么特别的东西。
6,加上24,说得更困惑这个关键字:
查看plaincopy到clipboardprint
JSClass()函数
{
this.m_text = 'division元;
this.m_element = document.createelement('div);
this.m_element.innerhtml = this.m_text;
this.m_element.attachevent('onclick ',这个字符串);
}
jsclass.prototype.render =功能()
{
document.body.appendchild(这个。m_element);
}
jsclass.prototype.tostring =功能()
{
(这m_text警报。);
};
VaR JC =新JSClass();
Jc:渲染();
Jc.ToString();
JSClass()函数
{
this.m_text = 'division元;
this.m_element = document.createelement('div);
this.m_element.innerhtml = this.m_text;
this.m_element.attachevent('onclick ',这个字符串);
}
jsclass.prototype.render =功能()
{
document.body.appendchild(这个。m_element);
}
jsclass.prototype.tostring =功能()
{
(这m_text警报。);
};
VaR JC =新JSClass();
Jc:渲染();
Jc.ToString();
我来谈谈结果。在页面
运行之后,它将
显示:除法元素
7,CSS的表达式表达式使用这个关键字:
高度:表达(这个。parentelement。高度);>
分元
高度:表达(这个。parentelement。高度);>
分元
这里的这个被认为与1相同,它也指div元素对象实例本身。
8。函数内部函数中的这个关键字被使用:
查看plaincopy到clipboardprint
outerfoo()函数
{
这名'outer名字;
InnerFoo()函数
{
变量名=内心的名字;
警报(名称+,+;
}
InnerFoo回来了;
}
outerfoo()()();
outerfoo()函数
{
这名'outer名字;
InnerFoo()函数
{
变量名=内心的名字;
警报(名称+,+;
}
InnerFoo回来了;
}
outerfoo()()();
运行结果显示:内部名称,外部名称,根据我们2的解释,这里的结果是内部名称,未定义的似乎更合理,但
正确的结果确实是前者,这取决于Javascript变量范围的问题。建议参考
文本的keyword'var'or在原来的Jscript文章回复。
总之,Javascript中有3种用法(文本的详细文本):
1。在HTML元素事件属性或CSS的表达式表达式中使用内联关键字中的这个关键字——与原来的1, 7对应
2。在事件处理函数中使用这个关键字——原始文本的2, 3
它可以分为两种方式。
(1)DOM
模式——这种方式的结果就是指向窗口(窗口)对象。
(2)DHTML方式这种方式的结果是,这一点对div元素对象的一个实例
三.在类定义中使用这个关键字,并在其内部函数或成员函数(主要是原型生成)中使用它——与原来的4, 5和8对应。
需要解释的是,函数也是一个对象,因此需要区分变量的定义和成员变量的定义,如下所示:
查看plaincopy到clipboardprint
var变量名; / /变量定义
作用域:定义在范围内的函数
/ /使用:直接使用的变量名
this.varname; / /成员变量的定义
作用域:函数对象定义及其成员函数
使用方法: / / this.varname
var变量名; / /变量定义
作用域:定义在范围内的函数
/ /使用:直接使用的变量名
this.varname; / /成员变量的定义
作用域:函数对象定义及其成员函数
使用方法: / / this.varname
前三种说法很容易理解。对原始第六中提到的程序进行了测试和改进,以说明上述两种方法。
查看plaincopy到clipboardprint
JSClass()函数
{
无功vartext =函数变量!函数中的公共变量
this.m_text = 'func成员!;函数类成员变量
this.m_element = document.createelement('div '); / /成员变量,
创建一个div对象
this.m_element.innerhtml = vartext; / /公共变量的使用功能
this.m_element.attachevent('onclick ',这个ToString); / /一个对象
连接的事件处理函数
this.newelement = document.createelement('div);
this.newelement.innerhtml =新元素;
this.newelement.m_text =新的元素文本!;创建一个成员来创建对象
this.newelement.onclick =功能()
{
警报(这个。m_text); / /会员一个div对象
};
}
jsclass.prototype.render =功能()
{
document.body.appendchild(这个。m_element); / / div中悬窗
document.body.appendchild(这个新元素);
}
jsclass.prototype.tostring =功能()
{
警报(这个。m_text); / /(窗口)的窗口对象
};
函数初始化(){
VaR JC =新JSClass();
Jc:渲染();
Jc.ToString(本); / /实例里面一jsclass类,具有m_text成员
}
初始化();
JSClass()函数
{
无功vartext =函数变量!函数中的公共变量
this.m_text = 'func成员!;函数类成员变量
this.m_element = document.createelement('div '); / /成员变量,创建一个div对象
this.m_element.innerhtml = vartext; / /公共变量的使用功能
this.m_element.attachevent('onclick ',这个ToString); / /一个对象连接的事件处理函数
this.newelement = document.createelement('div);
this.newelement.innerhtml =新元素;
this.newelement.m_text =新的元素文本!;创建一个成员来创建对象
this.newelement.onclick =功能()
{
警报(这个。m_text); / /会员一个div对象
};
}
jsclass.prototype.render =功能()
{
document.body.appendchild(这个。m_element); / / div中悬窗
document.body.appendchild(这个新元素);
}
jsclass.prototype.tostring =功能()
{
警报(这个。m_text); / /(窗口)的窗口对象
};
函数初始化(){
VaR JC =新JSClass();
Jc:渲染();
Jc.ToString(本); / /实例里面一jsclass类,具有m_text成员
}
初始化();
上述代码执行的结果是:
加载页面时,弹出对话框并输出函数成员!
在页面上显示
函数变量!
新的元素
单击函数变量时,弹出对话框并显示未定义的变量。
因为在这个指针在toString函数点这时间窗口
单击新元素时,弹出对话框显示新元素文本!
因为那时这个指针在ToString函数指向的div元素,以及元素定义了m_text成员(this.newelement.m_text =新的元素文本)。