JavaScript编程随笔
尽管说用JS非常多年了,可是却一直停留在肤浅的阶段,对JS的机制原理依旧是一知半解,比如:闭包。尽管能说出一二。却不能说出三四,确实羞愧。近期恶补一番。并将比較与大家分享,希望对大家有些帮助。
闭包
老概念,在JS编程中我们可能在不经意间就用到了它,仅仅是我们不知道而已。
首先呢,闭包并非一个函数或者类型。而是一直语言机制,假设硬要做个类比的话。我认为它应该属于“继承”这类型的语言机制。
在JS里面,函数外部是不能直接调用函数内部的变量。假设我们非要调用它们的话,那你就须要闭包,举个样例:
假设我们想在outerFunc外部调用color变量,那我们就得使用闭包机制,调用方式例如以下
function outerFunc()
{
var color='red';
function innerFunc(c)
{
color=c;
alert(color);
}
return innerFunc;
} var tmp=outerFunc();
tmp('green'); //green
This
假设我们调用的对象分别存在多个定义域里面,比如:全局或局部,而且我们在用它的时候还加上了Thiskeyword,那大家就要小心了。这时候我们就须要分辨我们调用的对象究竟是全局的呢,还是局部的呢?
第一次调用返回的结果是一个包括this.name的函数体,可是我们运行它的定义域确实在全局,全部它会返回’the window'。
可是第二次调用呢,它的定义域是局部,所以它返回'my object',第三次调用返回的是闭包,所以它的结果当然是它的局部变量值‘my object2'。
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
return function () {
return this.name;
};
}
}; var object2 = {
name: "My Object2",
age: 22,
gender:'Femal',
getNameFunc: function () {
var name = this.name;
return function () {
return name;
};
}
}; alert(object.getNameFunc()());
object.show = object.getNameFunc();
alert(object.show());
alert(object2.getNameFunc()());
Call 和 Apply
这两keyword的使用和This有非常大的关系,它们能模拟对象的运行环节,对上面的样例来说,假设我们对第一调用做例如以下改动,那么它返回的结果将是’My Object‘。
alert(object.getNameFunc().call(object));
alert(object.getNameFunc().apply(object));
首先呢,object.getNameFunc()返回的是一个函数体。其次呢,我们通过call和apply在object的定义域内运行返回的函数体,所以返回的值也就不一样了。
Prototype
prototype是JS对象的一个内部原型机制。我们能够给它加入属性或方法,这些内容都能被它相应的对象所识别。
prototype在JS面向对象的编程中用的比較多,基本上都用它来实现对象的继承机制,详细看以下样例。
function person()
{
this.sex = 'male';
this.age = 21; }
person.prototype.introduce = function () {
console.log('im a ' + this.sex + ' and im ' + this.age + ' years old');
} function Jim()
{
this.name = 'Jim';
} Jim.prototype = new person(); var people = new Jim();
people.introduce();
在这里呢,我们成功的将person的全部属性赋值给Jim.prototype了,当然这些东西对Jim对象是全然可见的,大家看,是不是通过这样的方式非常实现JS的单项继承呢?
JavaScript编程随笔的更多相关文章
- Javascript编程风格
Douglas Crockford是Javascript权威,Json格式就是他的发明. 去年11月他有一个演讲(Youtube),谈到了好的Javascript编程风格是什么.我非常推荐这个演讲,它 ...
- javascript编程: JSON, Mapping, 回调
使用 Javascript 编程, 组合使用 JSON 数据格式,Mapping 和回调技术, 可以产生很强的表达效果. 在实际工作中, 总会有数据汇总的需求. 比如说, 取得了多个 device ...
- javascript编程的最佳实践推荐
推荐的javascript编程的最佳实践,摘要记录在这里: 可维护的代码保证代码的性能部署代码 1 可维护的代码1.1什么是维护的代码:可理解性——其他人可以接手代码并理解它的意图和一般途径,而无需原 ...
- Javascript编程模式(JavaScript Programming Patterns)Part 1.(初级篇)
JavaScript 为网站添加状态,这些状态可能是校验或者更复杂的行为像拖拽终止功能或者是异步的请求webserver (aka Ajax). 在过去的那些年里, JavaScript librar ...
- 实践javascript美术馆的小案例,学习到的东西还是蛮多的,包括javascript编程中的预留退路、分离javascript、以及实现向后兼容等
javascript美术馆(改进2) 一.javascript编程过程中的好习惯 1.实现预留退路 js被禁掉,图片也可以显示出来,href属性带有图片路径 <script src=" ...
- 【HANA系列】SAP HANA XS使用JavaScript编程详解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...
- 学习现代 JavaScript 编程的最佳教程
天天编码 , 版权所有丨本文标题:0.0 学习现代 JavaScript 编程的最佳教程 转载请保留页面地址:http://www.tiantianbianma.com/the-modern-java ...
- javascript编程思想
javascript编程开发修炼之道 提要文摘附注: 本文的核心内容是围绕javascript前端开发的编程技术要素,来深入地探讨编写高质量的javascript代码的方法.技巧.规范和最佳实践, ...
- 《JavaScript编程实战》
<JavaScript编程实战> 基本信息 原书名:JavaScript programming: pushing the limits 作者: (美)Jon Raasch 译者: 吴海星 ...
随机推荐
- Mybatis 中 foreach collection 的三种用法
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...
- 洛谷——P1886 滑动窗口|| POJ——T2823 Sliding Window
https://www.luogu.org/problem/show?pid=1886#sub || http://poj.org/problem?id=2823 题目描述 现在有一堆数字共N个数字( ...
- python多线程编程代码
参考了这篇文章,写的挺好的. http://blog.csdn.net/abcjennifer/article/details/49474897 import time import threadin ...
- hdu1290
由二维的切割问题可知,平面切割与线之间的交点有关,即交点决定射线和线段的条数,从而决定新增的区域数. 当有n-1个平面时,切割的空间数为f(n-1).要有最多的空间数.则第n个平面需与前n-1个平面相 ...
- POJ 1496 POJ 1850 组合计数
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8256 Accepted: 3906 Description Tran ...
- 第十五章,读取txt文件(C++)
#include <iostream> #include <fstream> int main(int argc, char** argv) { std::ifstream i ...
- 17.广度优先遍历bfs
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...
- Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过. 一.MongoDB介绍 MongoDB 是一个是 ...
- Aspose.Words 操作指北
前言: 这段时间因为业务需求,需要做一个word 导出,表单式的那种,因为之前也做过NPOI 操作 Excel 这类型的问题,所以总以为word 导出应该挺简单的,一直没有研究这块,汗颜,天真大意 ...
- C#的常见算法(面试)(转)
一.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m //方法一,通过顺序规律写程序,同时也知道flag标志位的重要性. static int F1(int m) { ; ...