简单的记录一下JavaScript 高级应用

我是一名.net 程序员但是由于公司需求,开发离线app,但是在工作的过程中我发现,周围人在写JavaScript的时候都是面向过程的编码,对于我这.net程序员,遇到这种情况真是六神无主,但是工作中还要赶进度,于是乎我就白天工作,晚上就在别人玩游戏的时候,好好的研习了一下JavaScript的面向对象的实现方式。

以下的讲解我只简单的说明一下,我这个项目中使用到的技术的简单说明。

【一】

"use strict"; 采用了严格模式 ,这样写的好处可以消除Javascript一些不合理的语法(例如:)

var temp = "7072547";

temp2 = "7452707";

这里面的temp2它是一个全局的变量,在使用严格模式的时候,会爆一个异常。详细的内容可以看严格模式详解

【二】匿名函数自调用,由于js里面没有块的概念,如果把变量定义在公共空间上,这样变量就属于一个Window 下的变量,只有当window 销毁的时候才会销毁空间

(function(win){
     var _win = win;
     var name = "王阳";
     var qq = "7072547";
})(window)

上面的代码的好处是 我把window的处理当做局部对象,而在函数里面的变量都是局部变量这样就不会占用过多的全局空间,同时方法里面命名的变量也不会与方法外面的变量命名进行冲突。

【三】这里是重点 使用了面向对象,js 面向对象可不想其他传统语言 例如java c# 那样 对类划分的非常的清晰,js的面向对象可以说是面向于无形,你也可以理解为此时无形胜有形,为什么这样说那

C# 类的实现都是 都会有class 关键字,可是js 那!只有个function ,我刚开始写js 的时候想用面向对象都无从下手,但辛亏我在人家玩游戏的时间,好好的研习一下JavaScript,才了解原来其实function

可以算是一个特殊的对象了。

function belle(){
      this.name;
}

belle.display = function(){
      alert(this.name);
}

belle.display();

上面的代码来看函数完全有类的特性,其实上面的代码belle就是构造函数,而display就是他的静态方法。

如果把上面的代码写成这个样子be.display()就会报错 不是一个函数,其实是未找到这个方法。为什么那?

function belle(){
      this.name;
}

belle.display = function(){
      alert(this.name);
}

var be =new belle();
be.display();

在别人玩游戏的时候,好好研习了JavaScript的时候才发现,be 是对象而对象是没有原型属性的(prototype)对象只有__proto__ 内置属性 和construcor。在

var be =new belle(); 实例化的时候 会把belle 函数的prototype的地址给__proto__属性 如果 be 是个空对象 那么be下面的constructor 会指向 object,但是如果new 了之后be下面的constructor就指向了belle();所以你在var be = new belle();  be.display() 会报找不到这个函数,因为对象在查找不到属性的情况下会向prototype里面去查找,但是上面的代码函数只挂在constructor上面所以报会找不到的错误,上面的代码可以这样改写。
function belle(){
      this.name;
}

belle.display = function(){
      alert(this.name);
}

var be = new belle();
be.constructor.display();

这下明白了吧!

然后就是使用prototype来实现类公共方法。下面是我之前写的面向对象实现方式

function belle(){
    var self = this;
    self.name = "王阳";
    self.qq = "7072547";
    self.myMethod = function()
    {
        alert("name:"+self.name+" qq:"+self.qq);
    }
}

var be =new belle();
be.myMethod();

这样就实现了面向对象,我可以使用工厂模式等常用设计模式来改写我们的前台代码,由于现在web的前端代码越来越多,这样写的自然好处多多,但是

仔细查看上面的代码你们有没有发现个问题?

什么问题那,如果上面的代码我采用工厂模式的话,我每new一个对象,belle里面的属性和方法就要重新开辟空间,这样对大对象的操作,简直是太过美观不敢直视啊!

所以说,我采用下的方式就解决了这个问题。

function belle(){
    var self = this;
    self.name = "王阳";
    self.qq = "7072547";
}
belle.prototype.myMethod = function(){
    alert("name:"+this.name+" qq:"+this.qq);
}

var be =new belle();
be.myMethod();

这样的好处是,我把公共的方法放到原型中,给大家共享,这样在每次new的时候都不会重新开辟空间,而是想原型链上进行查询。

由于本人只是后端的C#程序员,去年刚毕业,只是在工作中边工作边学习,积累一些小的经验,请各位大牛们看了,多给我点意见,而对那些小菜们,多给你们一些思路,还是那句话,要想超越别人,就在别人做其他的事情的时候,去努力,去beyond!

PS:这里注意一下 var be = new belle();你们可以这样理解

var be  = {}
belle.call(be);
be .__proto__ = belle.prototype;

由于老板又催活了,所以精彩继续,过会回来。。。

时间: 2024-10-11 04:23:08

简单的记录一下JavaScript 高级应用的相关文章

《Javascript高级程序设计》阅读记录(二):第四章

这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅读 另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核心内容. 绿色背景的内容是我认为比较值得注意的原著内容.

《Javascript高级程序设计》阅读记录(三):第五章 上

这个系列以往文字地址: <Javascript高级程序设计>阅读记录(一):第二.三章 <Javascript高级程序设计>阅读记录(二):第四章 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅读 另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核

《Javascript高级程序设计》学习记录(一)

最近又开始重新阅读<javascript高级程序设计>了,记忆中这是第三次了,但是前面都是走马观花式的过了,这次还是需要好好整理和实践一番了. 虽然是一些基础概念,但是还是有好多容易注意的地方,不知道它的玄机还有这么多,特在此记录一下,防止自己忘记,同时也能增加自己的理解 (1)javascript中共有5种简单的数据类型:Undefined,Null,Boolean,Number,String,一种复杂的数据类型Object (2)typeof操作符 在javascript中,typeof和

《Javascript高级程序设计》阅读记录(四):第五章 下

这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅读 另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核心内容. 绿色背景的内容是我认为比较值得注意的原著内容. 黄色背景的内容是我认为非常重要的原著内容. 我的理解会用蓝色的字体标示出来. 这章的内容较多,而且比较重要,分两篇

JavaScript高级程序设计学习笔记--错误处理与调试

try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function testFinally(){ try{ return 2; }catch(error){ return 1; }finally{ return 0; } } 调用这个函数会返回0(PS:但我实际执行的时候会先返回0,再返回2) 抛出错误 与try-catch语句相配的还有一个throw操作符,用于

javascript高级程序设计——笔记

javascript高级程序设计--笔记 基本概念 基本数据类型包括Undefined/Null/Boolean/Number和String 无须指定函数的返回值,实际上,未指定返回值的函数返回的是一个特殊的undefined值 变量.作用域和内存问题 基本类型值在内存中占据固定大小的空间,因此保存在栈内存中 引用类型的值是对象,保存在堆内存中 确定一个值是哪种基本类型用typeof,确定一个值是哪种引用用instanceof 所有变量都存在于一个执行环境当中,这个执行环境决定了变量的生命周期,

javascript高级编程笔记01(基本概念)

1.在html中使用JavaScript 1.  <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选,通过src属性指定代码的字符集,大多浏览器会忽略这个值,所以很少人使用 language:已放弃 src:可选,外部脚本的地址 type:可选,现在不推荐用“text/javascript”,考虑到约定俗成和最大限度的浏览器兼容,目前type属性的值还是text/javascript,不过,这个属性并不是必需

读书时间:《JavaScript高级程序设计》 一

在2011年的时候第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一些了内容. 第1章:JavaScript简介 JavaScript的历史.版本,可以看到一个有趣的故事. JavaScript是什么? 一个完整的JavaScript应该有3个不同的部分组成: 1. ECMAScript(核心) ECMAScript规定了语言的:语法.类型.语句.关键字.保

JavaScript高级程序设计学习(三)之变量、作用域和内存问题

这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于java中涉及到jvm,因此可以自动垃圾回收和内存分配,而不需要手动. 一.变量 每个变量都有其类型,数据类型.在java中分基本数据类型和引用数据类型,js同样如此. 面试题:java的基本数据类型有哪些,及其所占字节?引用类型有哪些? java基本数据类型分别为int(4),float(4),dou