1.方法调用模式
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了丁青免费建站欢迎大家使用!
当一个函数被保存为对象的一个属性时,我们称之为一个方法。当一个方法被调用时,this被绑定到该对象。
[javascript] view plain copy
function A() {
this.x = 1; //定义a.x
this.b = function () { //定义a.b
this.helper = function () { //定义a.helper
console.log(this); //4.console.log(a)
}
this.helper(); //3.调用a.helper(); 此时的helper,是一个方法,所以helper中的this指向a
}
this.b(); //2.调用a.b(),此时的b是a的一个属性,所以是一个方法,所以b中的this指向a
}
var a = new A(); //1.创建a对象
输出: A {x:1}
2.函数调用模式
当一个函数不是一个对象的属性时,就是被当做一个函数来调用的。此时this被绑定到全局对象。
[javascript] view plain copy
function A() {
this.x = 1;
this.b = function () {
var helper = function () {
console.log(this);
}
helper(); //此时的helper不是任何对象的属性,只是一个函数
}
this.b();
}
var a = new A();
输出: Window {external: Object, ......}
3.构造器调用模式
用new关键字,此时this被绑定到创建出来的新对象上。
[javascript] view plain copy
function A() {
this.x = 1;
this.b = function () {
this.helper = function () { //定义aa.helper
console.log(this); //4.console.log(aa)
}
this.helper(); //3.调用aa.helper(); 此时的helper,是一个方法,所以helper中的this指向aa
}
var aa = new this.b(); //2.创建一个新的对象aa,所以b()中的this指向aa
}
var a = new A(); //1.创建a对象
输出: A.b {} ;
另外,这里举Splunk吉祥物pony的例子来说一说new操作符做的事情:
[javascript] view plain copy
function Pony(color) {
// var this = Object.create(Pony.prototype);
// instance members
this.color = color;
// private members
var age = 50;
// private methods
function secreteMethod() {
console.log('Secret!');
}
// make private member visible due to closure
this.getAge = function() {
console.log('My age is : ' + age);
};
// return this;
}
// methods
Pony.prototype.tellColor = function() {
console.log('I am ' + this.color);
};
// static attributes
Pony.type = 'horse';
var pony = new Pony('white');
pony.tellColor();
pony.getAge();
what happens?
[javascript] view plain copy
var pony = new Pony('white');
// equals
var pony = {};
pony.__proto__ = Pony.prototype;
Pony.call(pony, 'white');
4.apply调用模式
js是一门函数式的面向对象编程语言,所以函数可以有方法。apply(or call)方法允许我们构建一个参数数组传递给调用函数,也允许我们选择this的值。它接受两个参数,第一个是要绑定给this的值,第二个是一个参数数组。
[javascript] view plain copy
function People (name) {
this.name = name;
}
People.prototype.greet = function () {
console.log('hi,'+this.name);
};
var dog = {
name: 'hobbo'
};
People.prototype.greet.apply(dog);
输出: hi,hobbo
总结:
this默认指向global object
当函数作为对象的属性被调用时,函数中的this指向那个对象
当使用new操作符来调用函数时,函数中的this指向新创建的对象
当使用apply或者call来调用函数时,this指向被传给call活apply的第一个参数。如果第一个参数是空或者不是一个对象,this指向global object
《JavaScript语言精粹》(Douglas Crockford)电子书网盘下载免费在线阅读
资源链接:
链接:
提取码:y0jn
书名:JavaScript语言精粹
作者:Douglas Crockford
译者:赵泽欣
豆瓣评分:9.1
出版社:电子工业出版社
出版年份:2009-4
页数:155
内容简介:
本书通过对JavaScript语言的分析,甄别出好的和坏的特性,从而提取出相对这门语言的整体而言具有更好的可靠性、可读性和可维护性的JavaScript的子集,以便你能用它创建真正可扩展的和高效的代码。
雅虎资深JavaScript架构师Douglas Crockford倾力之作。
向读者介绍如何运用JavaScript创建真正可扩展的和高效的代码。
作者简介:
Douglas Crockford是一名来自Yahoo!的资深JavaScript架构师,以创造和维护JSON (JavaScriptObject Notation) 格式而为大家所熟知。他定期在各类会议上发表有关高级JavaScript的主题演讲。
从0基础到勉强能用,只求入门的话2-3个月绰绰有余,但是要精通的话肯定是需要花更多时间日积月累了,选择培训的话是要参与一些项目联练习的,因为JavaScript很多技巧不通过项目这样比较大的历练是用不上的。千锋官网每日更新最新软件开发基础知识内容,巩固日常学习中的基础技能。更有免费的软件开发视频教程帮助学员快速学习。 千锋教育就有线上免费的软件开发公开课,。
Web前端培训多长时间,只能说简单入门在五到六个月,真正要达到精通级别的话,需要天赋跟经验的积累。正所谓,一入前端深似海,从此回首无边界。活到老,学到老。只要步入了前端开发你就会发现,前端真的是要一直不停的学,不停的学。千锋教育集团目前已与国内4000多家企业建立人才输送合作,与500多所大学建立实训就业合作,每年为各大企业输送上万名移动开发工程师,每年有数十万名学员受益于千锋教育组织的技术研讨会、技术培训课、网络公开课及免费教学视频。
《JavaScript语言精粹修订版》百度网盘pdf最新全集下载:
链接:
?pwd=e2k5 提取码:e2k5
简介:JavaScript 曾是“世界上误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从受误解的编程语言演变为非常流行的语言”,这除了幸运之外,也证明了它其实是一门优秀的语言。Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看到一门优雅的、轻量级的和非常富有表现力的语言。作者从语法、对象、函数、继承、数组、正则表达式、方法、样式和优美的特性这9 个方面来呈现这门语言真正的精华部分,通过它们完全可以构建出优雅高效的代码。作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。
第一本:《JavaScript权威指南》,经典级教材,很厚一本,俗称“犀牛书”,囊括了JS几乎所有的基础知识,新版本还加入了最新的技术内容,适合初学者,有经验的开发者也常常作为随手翻阅的语法书。
第二本:《JavaScript语言精粹》,俗称“蝴蝶书”,是介绍JavaScript语言本质一本书,教你全面了解这门语言的糟粕部分,构建出优雅高效的代码。
第三本:《JavaScript高级程序设计》,这本是我强烈推荐的,是非常经典的JavaScript畅销书,内容全面深入、贴近实战,详细讲解了JavaScript语言的核心,又展示了现有规范及实现以及为开发Web应用提供的各种支持和特性。