Javascript学习笔记--伪类和继承

Javascript 中继承可以分为两大类(非构造函数的继承和构造函数的继承),先从简单的说起,了解一下基于构造函数的继承。 Javascript 是一门基于原形的的语言,本身并没有类的概念,所以只能用模拟基于类的模式来实现类和类的继承。用构造函数来模拟类的概念。例如,我们定义一个 Person 类。 function Person(name, age) { this.name = name; this.age = age; } 上面就定义了一个 Person 类,包含 name 和 age 属性,下面来调用这个类。 var somebody = new Person("John", 18); alert(somebody.name); // John alert(somebody.age); // 18 OK,到这里就完成了一个简单的类的构造函数和调用方法。接下来,进一步了解类的继承,比如需要一个 Developer 的类,Developer 类需要继承 Person 类,此外还要包含工程师所会的语言(lang)和性别(sex)。还是用构造函数的方法来写这个类。 function Developer(name, age, sex, lang) { this.person = Person; this.person(name, age); delete this.person; this.sex = sex; this.lang = lang; } Developer 类就可以继承 Person 中的属性了,尝试调用一下。 var coder = new Developer("Bill", 22, "Male", "Javascript"); alert(coder.name); // Bill alert(coder.age); // 22 alert(coder.sex); // Male alert(coder.lang); // Javascript Developer 类中对于 Person 类的继承方法非常好理解,由于 Javascript 是基于函数的,而 Person 这个构造函数本质上也是函数,那么就可以用调用 Person 的方法继承它。看到这里可能有人会问,既然通过对构造函数的调用可以实现继承,那么为什么不直接使用 ...

一月 6, 2013 · 1 分钟 · Zhiya

nettop命令引发的一个小问题

在网上看到一篇帖子,是说 Mac OSX 10.7 中新加入了一个 nettop 命令,可以实时查看当前网络链接和数据流量。这是 nettop 命令的描述: The nettop program displays a list of sockets or routes. The counts for network structures are updated periodically. 于是在 Terminal 中尝试了一下。 尝鲜过后就再也没管。但是关闭 Terminal 大概一两分钟后,Mac 的风扇突然疯狂的转了起来。iStatMenu 上看达到了 5300rpm 左右。一般情况下,除非开游戏或者看 Flash,才有可能出现风扇飞转的情况,但是看了一下 dock 发现只开了 Chrome、iMessage 和 iTunes,也没有开 Apache 之类的服务。打开活动检测器,发现 CPU 四个核心都已经爆表,查看进程,有两个 nettop 进程几乎占用了所有 CPU 资源。 关闭 nettop 之后,CPU 占用率迅速下降,风扇飞转的情况也逐渐消失。 回想一下,可能是使用 nettop 命令后没有退出 nettop,而直接关闭 Terminal 造成的。经过尝试,发现问题确实出在没有正确退出 nettop 上。可能这是一个设计中没有考虑到的小 bug。 使用 man nettop 查看文档,文档说明中退出 nettop 应该采用 q,但没有说必须这样退出,而且很多时候,直接关闭 Terminal 确实是一些人的习惯,比如我:) ...

十二月 19, 2012 · 1 分钟 · Zhiya

browser.js-浏览器和操作系统识别

本人制作的浏览器识别 js。 将 browser-min.js 导入到 html 的头文件中,会返回全局变量 browser,其中 browser.browser 代表浏览器,browser.engine 代表浏览器内核,browser.version 代表浏览器版本,browser.system 代表操作系统。 未压缩版本下载:http://labs.simpleapples.com/browser/browser.js.zip(6.025kb) 已压缩版本下载:http://labs.simpleapples.com/browser/browser-min.js.zip(1.387kb) 演示地址:http://labs.simpleapples.com/browser github: http://github.com/simpleapples/browser.js

十二月 11, 2012 · 1 分钟 · Zhiya

一个关于Javascript的小测试

在 SAE 的微博上看到一个叫《你是否真的了解 javascript?》的小测试,虽然只有几段代码,但却很能说明一些容易忽视的问题。 先贴下原微博的图: 第一段代码执行结果:1 Javascript 没有提供块级作用域,所以 if 语句{}中的 a,在外部是可见的。 第二段代码执行结果:1 这里 function 的名字和变量的名字一样,但是 var b = function a () {}; 这样的用法中,a 是被忽略的。也就是 funciton a 并不影响变量 a 的值。 第三段代码执行结果:输出函数本身 应该说,大家不会这么写代码 = =!,但是呢,既然这么写了,那么首先 function a() {}; 执行后,a 的值就是 function 本身, var a; 执行后,实际上没有给 a 赋值,那么 a 还是本身,如果执行 var a = 1; 再输出 a 就是 1 了。 第四段代码执行结果:10 函数接收到参数的时候,是存入到 arguments 数组里的,而参数的定义 x,y,a 则分别指向 arguments 的 0,1,2 三个位置。 所以改 argument 自然输出 a 也会变。 第五段代码执行结果:window 使用 ...

十二月 3, 2012 · 1 分钟 · Zhiya

Javascript中new操作符的探究

Javascript 中有一个很有意思的 new 操作符,在《Javascript 语言精粹》(Javascript:The Good Parts)中,new 被列为了不推荐的操作符。下面对于 new 的使用进行一些探究。 先来一段代码: function test() { var foo1 = new function () { this.i = 1; } var foo2 = function () { this.i = 2; } M.dis(foo1.i); //1 M.dis(foo2.i); //undefined M.dis(this.i); //undefined foo2(); M.dis(foo2.i); //undefined M.dis(this.i); //2 M.dis(foo1.prototype); //undefined M.dis(foo2.prototype); //[object Object] } *代码中的M.dis() = document.writeln() 上面代码很能说明使用 new 操作符和不使用 new 操作符的区别。 以下是本人根据以上结果对使用 new 操作符和不使用 new 操作符的一些理解。 使用 new 操作符函数会被立刻执行。不使用 new 操作符,函数会在被调用时执行。 foo1 在定义的时候就被执行了,所以输出foo1.i = 1,而foo2在定义时未被执行,所以输出foo2的结果为undefined, foo2中var foo2 = function () {}的定义形式和 function foo2 () {}的效果是一样的。 ...

十二月 2, 2012 · 1 分钟 · Zhiya