* 语言特性 *
---------------------------------------------------------------------------
1.引用
引用指向的只能是具体的对象,而不是另一个引用
注意: 一些对象修改会生成新对象,如字符串拼接
2.重载
重载依赖: A.判断传入参数数量; B.判断传入参数类型
伪数组: argument
3.类型检查
1) 方式一: 使用 typeof 操作符
if(typeof num == 'string') ...
2) 方式二: 构造函数
if(num.constructor == String) ...
4.作用域
--> 作用域由函数划分而不是由块划分
--> 基于浏览器的javascript中,所有属于全局作用域的变量其实都是window对象的属性
--> 如果变量没有显示定义,它就是全局定义的
5.闭包
1) 优化编码方式
setTimeout('otherFunction('+num+','+num2+')', 1000);
可改为形如:
function someFunction(msg, time){
setTimeout(function(){
alert(msg);
}, time);
}
2) 实现函数Curry化
function addGenerator(num){
return function(toAdd){
return num + toAdd;
};
}
var addFive = addGenerator(5);
alert(addFive(4) == 9);
3) 使用匿名函数隐藏全局作用域变量
(function(){
var msg = '';
//...
})();
4) 使用匿名函数激发出创建多个使用闭包的函数所需的作用域
var obj = document.getElementById('main');
var items = ['click', 'mouseover'];
for(var i=0,len=items.length; i<len; ++i){
(function(){
var item = items[i];
//如果没有外层匿名函数,这个闭包将只注册mouseover事件
obj['on'+item] = function(){
alert('正在'+item);
}
})();
}
6.上下文
var obj = {
yes: function(){
this.val = true;
},
no: function(){
this.val = false;
}
};
alert(obj.val==null); //没有val属性
obj.yes();
alert(obj.val==true); //val属性为true
window.no = obj.no; //切换了上下文
window.no();
alert(obj.val==true); //obj的val不变
alert(window.val==true); //window的val被更新
--> 使用 call 或 apply 调用,更易于理解
* 面向对象基础 *
---------------------------------------------------------------------------
1.公共方法
function User(name){
this.name = name;
}
//其上下文是实例化后的对象
User.prototype.getName = function(){
return this.name;
}
核心在于prototype属性的理解应用
2.私有方法
function Classroom(teachers){
var disp = function (){
//... 私有方法的一些操作
}
this.teachers = teachers;
disp();
}
var class = new Classroom(['Mr.Smith', 'Mr.Lee']);
//class.disp(); 这样写会报错,disp对外不可见
3.特权方法
function User(name, age){
var year = (new Date()).getFullYear() - age;
this.getYearBorn = function(){
return year;
}
}
特权方法(getYearBorn)是动态生成的,比往prototype上绑定方法开销大,但更灵活
4.静态方法
User.cloneUser = function(user){
return new User(user.getName(), user.getAge());
}
1) 唯一优点: 保证对象的命名空间整洁
2) 仅为组织代码而使用的方法
3) 实质与其他一般函数没区别
* 标准化面向对象的代码 *
---------------------------------------------------------------------------
1.原型式继承
1) 原理: 对象的构造函数可以从其他对象中继承方法,它创建出一个原型对象后,所有
其他的新对象都可以基于这个原型对象来构建
2) 原型式继承的设计适用于单继承而非多继承
3) 使用示例:
function Person(name){
this.name = name;
}
Person.prototype.getName = function(){
return this.name;
}
function User(name, password){
this.name = name;
this.password = password;
}
User.prototype = new Person(); //关键代码!继承Person对象的所有方法
User.prototype.getPassword = function(){
return this.password;
}
2.类式继承
Function.prototype.method = function(name, fn){
this.prototype[name] = fn;
return this;
}
Function.method('inherits', function(parent){
var depth = 0;
var proto = this.prototype = new parent();
this.method('uber', function uber(name){
var func, ret, v = parent.prototype;
if(depth){
for(var i=depth; i>0; --i){
v = v.constructor.prototype;
}
func = v[name];
}else{
func = proto[name];
if(func == this[name]){
func = v[name];
}
}
++depth;
ret = func.apply(this, Array.prototype.slice.apply(arguments, [1]));
--depth;
return ret;
});
return this;
});
Function.method('swiss', function(parent){
for(var i=1,len=arguments.length; i<len; ++i){
var name=arguments[i];
this.prototype[name] = parent.prototype[name];
}
return this;
});
function Person(name){
this.name = name;
}
Person.method('getName', function(){
return this.name;
});
function User(name, password){
this.name = name;
this.password = password;
}
User.inherits(Person);
User.method('getPassword', function(){
return this.password;
});
User.method('getName', function(){
return 'My name is ' + this.uber('getName');
});
分享到:
相关推荐
《精通JavaScript》这本书深入浅出地介绍了JavaScript的各个方面,旨在帮助读者从新手进阶到高级开发者。其附带的源代码压缩包“精通JavaScript.rar”包含了381个示例,覆盖了书中讲解的各种技术点。 在JavaScript...
《精通JavaScript:jQuery之父力作 附源码》是一本深入探讨JavaScript编程技术的书籍,作者在jQuery领域的权威使得这本书具有极高的学习价值。本书旨在帮助读者从基础到高级,全面掌握JavaScript语言,尤其注重实际...
根据提供的文件信息,我们可以推断出这是一份关于《精通JavaScript》这本书的PDF版本下载链接。但是,为了更好地满足您的需求,我将基于这个主题展开更详细的解释与介绍,包括JavaScript的基本概念、特点以及学习...
通过学习《Pro JavaScript Techniques》,开发者不仅能提升JavaScript编程技能,还能了解到许多专业级的开发技巧和最佳实践,对于进阶成为JavaScript专家具有极大的帮助。无论你是初学者还是经验丰富的开发者,这...
### 精通JavaScript #### 一、JavaScript简介与历史 JavaScript是一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。它最初由网景公司在1995年设计并实现,并且在ECMA国际组织的支持下,成为了一种标准...
《精通JavaScript(源代码)》是一本深度和广度兼具的JavaScript进阶教程,它不仅涵盖了语言基础,更深入到jQuery的源码解析,让读者能够在理解JavaScript的基础上,更好地应用和扩展jQuery,从而提升Web开发的效率和...
《精通JavaScript2015》是一本专注于JavaScript编程技术的专著,旨在帮助读者深入了解和掌握2015年版本的JavaScript语言的核心概念和技术。在那个时期,JavaScript已经成为了Web开发不可或缺的一部分,尤其是在前端...
在提供的文件"精通JavaScript.jQuery.pdf"中,我们可以期待找到关于JavaScript深入理解和使用jQuery的教程。jQuery的学习将帮助开发者更好地掌握如何利用JavaScript来处理网页交互、动画效果和数据请求。通过学习这...
这本书“精通JavaScript”深入探讨了该语言的核心概念和技术,旨在帮助开发者提升技能至专业水平。源代码提供了书中所有实例的实践参考,使得学习过程更加直观和有效。 在“精通JavaScript”中,你可以了解到以下...
函数式编程在JavaScript中也有着重要地位,比如闭包、高阶函数、Promise 和异步编程等,这些都是现代JavaScript开发中不可或缺的技能。特别是异步处理,对于处理网络请求、文件读写等耗时操作至关重要。 ES6...
总的来说,这本书是学习和精通JavaScript的宝贵资源,无论你是初学者还是经验丰富的开发者,都可以从中受益。通过阅读和实践书中的例子,你可以深入了解JavaScript的精髓,提升自己的编程技能,从而更好地利用...
《精通JavaScript》是John Resig所著的一部经典JavaScript教程,尤其因其作者是jQuery的创建者而备受关注。这本书深入浅出地介绍了JavaScript这门语言的各个方面,旨在帮助读者不仅理解JavaScript的基础,还能掌握其...
"精通JavaScript书及源码"这个主题涵盖了深入理解JavaScript语言原理、最佳实践以及实际应用等多个方面。 首先,JavaScript语法基础是所有学习者必须掌握的。这包括变量声明(var、let、const)、数据类型(原始...
精通JavaScript意味着能够熟练地运用它来创建交互式、动态的网页内容,提升用户体验,实现复杂的功能。这份“精通JavaScript(中文清晰优化版)”的资源,显然是为了帮助开发者深入理解和掌握这门语言,提供了中文...
14. jQuery插件开发:学习如何编写和使用自定义的jQuery插件。 15. 实战项目:通过实际项目巩固所学知识,提升实战能力。 16. 总结与回顾:复习关键知识点,为后续学习打下坚实基础。 17. 面向对象编程:深入理解...
JavaScript 和 jQuery 是 ...总之,精通 JavaScript 和 jQuery 对于任何想要在 web 开发领域有所建树的人来说都是至关重要的。这个资源将帮助开发者快速掌握这两门技术,从而能够构建出更加动态、用户友好的 web 应用。
要精通JavaScript源代码,我们需要深入理解其核心概念,包括变量、数据类型、作用域、函数、闭包、原型链以及面向对象编程。 首先,JavaScript中的变量通过`var`、`let`或`const`关键字声明,具有动态类型,意味着...
8. **ES6及以后的新特性**:包括箭头函数、模板字符串、解构赋值、类(class)、模块(import/export)、生成器(generator)和async/await等,这些都是现代JavaScript开发的重要组成部分。 9. **前端框架与库**:...
本资源“精通javascript的源代码”旨在帮助学习者通过实例深入理解JavaScript,从而更好地掌握这门语言。 在JavaScript的学习过程中,源代码起着至关重要的作用。源代码是程序的基础,它展示了如何使用语言语法、...
JavaScript和jQuery是Web开发中...总之,精通JavaScript与jQuery不仅需要掌握它们的基本语法和核心概念,还需要通过实践不断深化理解和应用能力。这将为你的Web开发生涯打下坚实的基础,并帮助你应对各种网页交互挑战。