尽管说用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. js内置对象——Math

    Math()是JavaScript的内置对象(对于内置对象的理解,会单独写文章说明),包含了很多数学相关的方法: 常用方法: 1 Math.ceil(x) //取最近的最大整数返回 2 Math.fl ...

  2. java JSON 和 Object 相互转换

    1.导入 jackson jar <dependency> <groupId>com.fasterxml.jackson.core</groupId> <ar ...

  3. Reentrant protected mode kernel using virtual 8086 mode interrupt service routines

    A method for allowing a protected mode kernel to service, in virtual 8086 mode, hardware interrupts ...

  4. 【转载】SQLITE3 使用总结

    转载自网友董淳光的文章. 前序: 这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台.我以前的工作就是为 unix 平台写代码.下面我所写的东西,虽然没有验证,但是我已尽量不使用任何 ...

  5. Educational Codeforces Round 6 B. Grandfather Dovlet’s calculator 暴力

    B. Grandfather Dovlet’s calculator   Once Max found an electronic calculator from his grandfather Do ...

  6. jquery 函数的定义

    var ss_login = { ptjy : function(method) { CloseAlert(); if( getLocalData("ActivePTJYUser" ...

  7. ES业界优秀实践案例汇总

    ES业界优秀案例汇总 携程 LinkedIn Etsy国外电商CPU(vCore) 70*32 1000*12 4200单日索引数据条数 600亿 500亿 100亿单核处理数据性能/天 2600万/ ...

  8. SpringBoot(五) 番外---Docker

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  9. javascript常用代码(不完整版)

    求大神指点 Javascript嵌入式 <script typt:javascript>代码</script> 注释 //或者/*内容*/ 变量名赋值 Var 变量名 = 值 ...

  10. css文字超出变省略号...

    <style>.text1 {    width:200px;    overflow:hidden;    text-overflow:ellipsis;    -o-text-over ...