尽管说用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编程随笔的更多相关文章

  1. Javascript编程风格

    Douglas Crockford是Javascript权威,Json格式就是他的发明. 去年11月他有一个演讲(Youtube),谈到了好的Javascript编程风格是什么.我非常推荐这个演讲,它 ...

  2. javascript编程: JSON, Mapping, 回调

    使用 Javascript  编程, 组合使用 JSON 数据格式,Mapping 和回调技术, 可以产生很强的表达效果. 在实际工作中, 总会有数据汇总的需求. 比如说, 取得了多个 device ...

  3. javascript编程的最佳实践推荐

    推荐的javascript编程的最佳实践,摘要记录在这里: 可维护的代码保证代码的性能部署代码 1 可维护的代码1.1什么是维护的代码:可理解性——其他人可以接手代码并理解它的意图和一般途径,而无需原 ...

  4. Javascript编程模式(JavaScript Programming Patterns)Part 1.(初级篇)

    JavaScript 为网站添加状态,这些状态可能是校验或者更复杂的行为像拖拽终止功能或者是异步的请求webserver (aka Ajax). 在过去的那些年里, JavaScript librar ...

  5. 实践javascript美术馆的小案例,学习到的东西还是蛮多的,包括javascript编程中的预留退路、分离javascript、以及实现向后兼容等

    javascript美术馆(改进2) 一.javascript编程过程中的好习惯 1.实现预留退路 js被禁掉,图片也可以显示出来,href属性带有图片路径 <script src=" ...

  6. 【HANA系列】SAP HANA XS使用JavaScript编程详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  7. 学习现代 JavaScript 编程的最佳教程

    天天编码 , 版权所有丨本文标题:0.0 学习现代 JavaScript 编程的最佳教程 转载请保留页面地址:http://www.tiantianbianma.com/the-modern-java ...

  8. javascript编程思想

    javascript编程开发修炼之道   提要文摘附注: 本文的核心内容是围绕javascript前端开发的编程技术要素,来深入地探讨编写高质量的javascript代码的方法.技巧.规范和最佳实践, ...

  9. 《JavaScript编程实战》

    <JavaScript编程实战> 基本信息 原书名:JavaScript programming: pushing the limits 作者: (美)Jon Raasch 译者: 吴海星 ...

随机推荐

  1. java内存管理之内存模型

    1,运行时数据区域 1. 程序计数器 (program counter register) 2. Java虚拟机栈 (jvm stack) 3. 本地方法栈 (native method stack) ...

  2. 洛谷 P2932 [USACO09JAN]地震造成的破坏Earthquake Damage

    P2932 [USACO09JAN]地震造成的破坏Earthquake Damage 题目描述 Wisconsin has had an earthquake that has struck Farm ...

  3. Mongodb简单介绍

    1. 简单介绍 Mongodb是一种强大.灵活,可扩展的数据存储方式.属于nosql.非关系型数据库的一种. mongodb是面向文档的数据库. 尽管是非关系型数据库.可是它保留了很多关系型数据库的特 ...

  4. 根据数据表自动生成javaBean

    package fanshe; import java.io.File; import java.io.FileWriter; import java.io.IOException; import j ...

  5. 【LDA】动手实现LDA

    这段时间对LDA比較感兴趣,尝试在工作中使用它.平时做想法的高速验证,都用的是"GibbsLDA++-0.2",一个c实现版本号的LDA. 这两天用c++ stl自己写了一个单机版 ...

  6. caffe中lenet_train_test.prototxt配置文件注解

    caffe框架下的lenet.prototxt定义了一个广义上的LeNet模型,对MNIST数据库进行训练实际使用的是lenet_train_test.prototxt模型. lenet_train_ ...

  7. mysql实战45讲 (三) 事务隔离:为什么你改了我还看不见 极客时间读书笔记

    提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱. 转账过程具体到程序里会有一系列的操作,比如查询余额 ...

  8. awesome python 中文版 相见恨晚!(pythonNB的第三方资源库)

    Awesome Python中文版来啦! 原文链接:Python 资源大全 内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志 ...

  9. python 3.x 学习笔记15(多线程)

    1.线程进程进程:程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程,不具备执行感念,只是程序各种资源集合 线程:线程是操作系统能够进行运算调度的最小单 ...

  10. (转载) Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框

    Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 标签: Android清除功能EditText仿IOS的输入框 2013-09-04 17:33 70865人阅读  ...