javascriptthis
介绍这在各种对象编程中起着非常重要的作用,它主要用于指向被调用的对象。然而,在Javascript中,这种性能有很大的不同,特别是在不同的执行上下文中。
我们从上一篇文章知道,这也是执行上下文中的一个属性,所有这些都是注定的和执行上下文。
复制代码代码如下所示:
activeexecutioncontext = { {
旁白:{…},
本:这个};
在Javascript中,这个值取决于调用的模式。有四种调用模式:方法调用模式、函数调用模式、构造函数调用模式和应用调用模式。
调用模式
方法调用模式
当一个函数被保存为对象的属性时,我们称它为一个方法。当一个方法被调用时,它被绑定到对象,也就是说,方法调用模式中的这个点指向调用对象。这很容易理解,你是我的一种方式,你属于我,你的这个当然指向我。
复制代码代码如下所示:
VaR MyObject = { {
值:0,
增量:函数(公司){
this.value =类型=数公司公司:1;
}
}
myobject.increment();
console.log(MyObject。值); / /输出:1
(3)myobject.increment;
console.log(MyObject。值); / /输出:4
因为您可以通过这个访问您所属的对象,所有人都可以调用和修改对象中的属性或方法。它必须在创建上下文时创建。所有这些对象绑定都发生在调用时,属于延迟绑定。
复制代码代码如下所示:
功能showvalue(){
console.log(的价值);
}
var;
值:;
a.showvalue = showvalue;
b.showvalue = showvalue;
a.showvalue(一); / /输出
B.showValue(B); / /输出
在这个例子中,函数showvalue是延迟。
函数调用方式
当函数不被称为对象的方法时,它是一个函数调用。在函数调用模式中,这是绑定到全局对象的。
复制代码代码如下所示:
myobject.double =函数(){
var =;
var函数(){()
(,console.log,that.value );/ /输出对象{价值:4、增量功能,双功能}:4
(这console.log,this.value );/ /窗口{顶:窗口:窗口输出…} :未定义
}
(帮助);对函数的调用
}
按照正常的思维方式,它应该像第四行一样输出。这一点,函数为对象,但由于上述语言设计的问题,这一点对全局对象。这使得这神秘莫测。但作为一个开发者,这当然是我们不愿意看到的,这是不稳定的,但补救措施也很简单,就是在这个例子中是这样的。在这种方式下,调用在辅助方法可以作为这个,简单方便。至于为什么函数调用方式是这样的,后面会详细解释当引用类型分析。
构造函数的调用模式
因为Javascript是基于原型的继承,它的设计者希望通过新的构造函数创建对象,以及面向对象的编程,这似乎不是一个好主意,有点尴尬,但他们失败了。一个是学不来的,但不学习。Javascript原型继承机制很强的足以满足面向对象所需的遗传多态性。
散漫的,好点说,构造函数调用模式说,构造函数调用模式,这是很简单的,就是用一个函数作为构造函数,然后介绍声明与这你打算分享和methods.as性能如下
复制代码代码如下所示:
功能人(姓名,年龄){
this.name =名称;
this.age =年龄;
this.say =函数(){
console.log(名称:%s,年龄:% n
}
}
VaR P1 =新的人(闪开
p1.say(名称); / /输出:闪开,年龄:24
var =新的人(张圣
p2.say(名称); / /输出:三、年龄:33
正如我们在上面的例子中可以清楚看到的,这是指向由新构造函数和构造函数创建的对象。这是因为在Javascript中,通过new调用构造函数,新操作符调用人函数的内部{ } }方法。然后,在创建对象之后,调用内部{ } }方法。所有相同的函数,人,将这个值设置为新创建的对象。
应用调用模式
在Javascript中的所有函数都是创造出来的,带着他们的两种方法:应用和电话。这两种方法的具体使用方法,我不想在这里详细解释,不知道的同学可以百度,很简单的。有两种方法,我们可以手动设置的。虽然这不是允许被修改,当它被创建时,必须手动设置它之前,我们创造了它,那是另一回事。这个设置是如此的伟大,你可以让你的对象调用任何方法。就像你可以让汽车在海里航行,而非洲象像彪马一样飞,而程序员像钢琴家一样演奏,哈哈,想象总是美好的,呼唤回报,但召唤不能实现另一个的功能。
复制代码代码如下所示:
var程序员{ {
名称:程序员
手:灵活的手
程序:函数(){
Console.log (this.name+ uses +this.hand+ to write code.);
}
}
var钢琴家= {
姓名:钢琴家,
手:灵活的手
播放:函数(){
console.log(这个名字+以+这。手+播放音乐。);
}
}
var播放器{ {
姓名:运动员
脚:健康的腿
运行:函数(){
console.log(这个名字+以+这。脚+跑场上。);
}
}
太注意常规标准。
(编程器);具有灵活的手代码的程序员。
(钢琴家,演奏);家庭灵活的双手演奏钢琴曲。
(播放器运行);奔驰在游戏中有球员柔韧的腿。
pianist.play.apply(程序员); / /程序员灵活的双手演奏美妙的音乐。
player.run.apply(程序员); / /在游戏程序员苯。没有强有力的腿由于缺乏锻炼。
有趣的是,应用程序的第一个参数是执行方法中的这一点,这样我们就可以使用其他人自己的方法来秘密地使用它们,这是非常方便的,这种技术经常用于某些框架中。
总结
这么多,我相信我们所看到的,以确定这在不同的情况下有一定的了解,旨在探讨参考对象的下一个讨论,介绍了价值这个方法调用模式和函数调用方式,但对空间的恐惧太长了,所以我决定用单独的一章分析参考对象的概念你。