摘要: 构造函数、原型实现继承的缺陷首先来分析构造函数和原型链两种实现继承方式的缺陷:构造函数(对象冒充)的主要问题是必须使用构造函数方式,且无法继承通过原型定义的方法,这不是最好的选择。不过如果使用原型链,就无法使用带参数的构造函数了。开发者如何选择呢?答案很简单,两者都用。构造函数+原型混合方式这种继承方式使用构造函数定义类,并非使用任何原型。创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。用这两种方式重写前面的例子,代码如下:function ClassA(sColor) { th... 阅读全文
posted @ 2013-05-07 15:15 黄明恩 阅读(1087) 评论(2) 推荐(0) 编辑
摘要: 我们知道在JavaScript中定义类的原型方式,而原型链扩展了这种方式,以一种有趣的方式实现继承机制。prototype 对象是个模板,要实例化的对象都以这个模板为基础。总而言之,prototype 对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制。如果用原型方式重定义前面例子中的类,它们将变为下列形式:function ClassA() {}ClassA.prototype.color = "blue";ClassA.prototype.sayColor = function () { alert(this.color);};functi 阅读全文
posted @ 2013-05-06 14:30 黄明恩 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 前面介绍过JavaScript中通过对象冒充来实现继承,这是最原始的方法。本文将介绍两种很类似于对象冒充的继承方式,即使用call()和apply()方法。call() 方法call() 方法是与经典的对象冒充方法最相似的方法。它的第一个参数用作 this 的对象。其他参数都直接传递给函数自身。例如:function sayHello(sPrefix,sSuffix) { alert(this.name + ”says“ + sPrefix + sSuffix);};var obj = new Object();obj.name = "Tom";sayHello.call( 阅读全文
posted @ 2013-05-06 13:11 黄明恩 阅读(1529) 评论(0) 推荐(2) 编辑
摘要: 我们知道JavaScript是面向对象的脚本语言,那么既然是面向对象,继承一定是必不可少的了。JavaScript的核心是ECMAScript,JavaScript继承机制的实现其实就是ECMAScript继承机制的实现。继承的方式ECMAScript 实现继承的方式不止一种。这是因为 JavaScript 中的继承机制并不是明确规定的,而是通过模仿实现的。这意味着所有的继承细节并非完全由解释程序处理。作为开发者,你有权决定最适用的继承方式。最原始的继承实现方式就是对象冒充,下面着重介绍该方法。对象冒充对象冒充实现继承的核心其实依赖于在函数环境中使用 this 关键字。其原理如下:构造函数使用 阅读全文
posted @ 2013-05-03 15:08 黄明恩 阅读(1231) 评论(0) 推荐(0) 编辑
摘要: 每种程序语言中都会涉及到字符窜连接,而这个小小的字符窜连接问题很可能会影响到系统的整体性能,本文主要探讨JavaScript中字符串连接的性能问题。而JavaScript的核心是ECMAScript 。与其他语言类似,ECMAScript 的字符串是不可变的,即它们的值不能改变。请考虑下面的代码:var str = "hello ";str += "world";实际上,这段代码在幕后执行的步骤如下:创建存储 "hello " 的字符串。创建存储 "world" 的字符串。创建存储连接结果的字符串。把 str 的当 阅读全文
posted @ 2013-05-03 14:20 黄明恩 阅读(2510) 评论(12) 推荐(6) 编辑
摘要: 在编写代码的时候难免涉及到变量的命名问题,不能只要求变量名的语法正确,而忽略了变量命名对代码可读性的影响。变量命名还应遵守以下某条著名的命名规则:著名的变量命名规则Camel 标记法首字母是小写的,接下来的字母都以大写字符开头。例如:var testValue = 0, secondValue = "hi";Pascal 标记法首字母是大写的,接下来的字母都以大写字符开头。例如:var TestValue = 0, SecondValue = "hi";匈牙利类型标记法在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的 阅读全文
posted @ 2013-05-03 11:01 黄明恩 阅读(2852) 评论(0) 推荐(2) 编辑
摘要: JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍。声明方式一:使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。该方式即为显式声明详细如下:var test = 5; //全局变量function a(){ var cc=3; //局部变量 alert(test);}function b(){alert(test);}声明方式二:没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。test... 阅读全文
posted @ 2013-04-28 13:51 黄明恩 阅读(1102) 评论(0) 推荐(1) 编辑
摘要: NodeJS内建有一个HTTP服务器供调试使用。学习任何新语言或新技术的第一步就是要写一个Hello World(世界,你好)程序,下面就直接贴出代码吧。首先需要建立一个名为 app.js 的文件,内容为://app.jsvar http = require('http');http.createServer(function(req, res) {res.writeHead(200, {'Content-Type': 'text/html'});res.write('<h1>Node.js</h1>'); 阅读全文
posted @ 2013-04-28 11:57 黄明恩 阅读(3638) 评论(0) 推荐(0) 编辑
摘要: 开发中遇到的问题 如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止Node.js 再重新运行才会奏效。这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,而 PHP 则总是重新读取并解析脚本(如果没有专门的优化配置)。Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启。这时若你修改了js文件,或是调试功能,或是增加功能。这 阅读全文
posted @ 2013-04-27 14:51 黄明恩 阅读(18913) 评论(0) 推荐(0) 编辑
摘要: 一、NodeJS简介 思考 首先我们来思考一个问题:我们都知道几乎所有现代主流浏览器都全面支持了ECMAScript 5.1版标准,而JavaScript的标准是ECMAScript。那么我们就容易认为JavaScript是一种浏览器端的解释型编程脚本。那么脱离了浏览器,JavaScript还能够解释运行吗?答案是肯定的,也就是说脱离了浏览器,在特定环境下JavaScript还是能运行的。JavaScript向来以Web网页的脚本语言而著称,但现在也可以用在许多非浏览器环境,例如node.js或者Apache CouchDB。本文就是基于NodeJS来进行探讨。 NodeJS是什么? ... 阅读全文
posted @ 2013-04-19 13:55 黄明恩 阅读(14945) 评论(1) 推荐(4) 编辑