理论

对于静态的类来说,JavaScript 对象直接量就已经够用了,但使用继承和实例来创建经典的类往往更有帮助。

JavaScript 是基于原型的编程语言,并没有包含内置类的实现。

但通过JavaScript 可以轻易地模拟出经典的类。

JavaScript 中有构造函数和 new 运算符。构造函数用来给实例对象初始化属性和值。任何JavaScript 函数都可以用做构造函数,构造函数必须使用 new 运算符作为前缀来创建新的实例。

new 运算符改变了函数的执行上下文,同时改变了return 语句的行为。

当使用 new 关键字来调用构造函数时,执行上下文从全局对象(window)变成一个空的上下文{},这个上下文代表了新生成的实例。因此,this 关键字指向当前创建的实例。如果构造函数没有返回值,那么这个新生成的实例就作为默认的返回值。如果指定了返回值,这个新实例就白白浪费了。

var Person = function(name) {
this.name = name;
};
// 实例化一个Person
var alice = new Person('zhang'); if .. 这样 Person('ben dan'); //=> undefined

上面这个例子说明了 new 与不 new 的区别。这个函数只会返回undefined,并且执行上下文是window(全局)对象,无意间创建了一个全局变量name。

实战

/**
* Class build my Own class
* Created by cyk on 14-8-19.
*/ var Class = function() {
"use strict"; // in current line, 'this' is : Class {} 对象实例
// in the finally, as we have a return value ,so the Class {} is unused. // 这样的做法每次都会产生一个'新的' klass 字面量方法
var klass = function() {
// this 均是上下文中新生成的实例
this.init.apply(this, arguments);
}; klass.prototype.init = function() {}; // 定义 prototype 的别名
klass.fn = klass.prototype; // 定义类的别名
klass.fn.parent = klass; // 给类添加属性
klass.extend = function ( obj ) {
// 可选的回调方法 extended
var extended = obj.extended; for( var i in obj ) {
klass[i] = obj[i];
}
if (extended) extended(klass);
}; // 给实例添加属性
klass.include = function ( obj ) {
// 可选的回调方法
var included = obj.included;
for( var i in obj ){
klass.fn[i] = obj[i];
}
if (included) included(klass);
}; /*
* 这里的实现支持extended 和included 回调。
* 将属性传入对象后就会触发这两回调函数
*/ return klass;
}; var ORMModule = { save: function () {
"use strict";
// 共享的函数
}
}; var Person = new Class(); // 虽然和上一行代码一样,但是获得的值却是新 new 出来的,
// 所有 Asset 和 Person 指向的都是 Class 的不同变量,只是变量内容相似罢了
var Asset = new Class(); // 所以 Person 和 Asset 现在指向的并非同一个变量 Person.include(ORMModule); Asset.include(ORMModule); Person.include({
find: function() {
console.log(this);
}
}); // person is : Class instance,
// klass {init: function, parent: function, save: function, find: function}
var person = new Person(); var asset = new Asset(); person.find(); // klass asset.find(); // undefined is not a function

先到这里,下集不见不看。

浅说如何制作javascript类库的更多相关文章

  1. 编写Javascript类库(jQuery版

    编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章 Posted on 2014-11-13 09:29 lzhdim 阅读(653) 评论(1) 编辑 收藏 本系列文 ...

  2. 《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通讯模式开发及注意事项。附:网友制作的类库说明(CHM)

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  3. javascript 框架、根基技巧、布局、CSS、控件 JavaScript 类库

    预筹备之 JavaScript 今朝支流的 JavaScript 框架排名中,jQuery 和 Ext 可算是佼佼者,得到了用户的普遍好评.海内的一些框架许多也是模仿 jQuery 对 JavaScr ...

  4. 编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章

    这些年主要关注于项目管理方面的工作,编码就比较少了.这几天比较空闲,就想把原来的经验沉淀下来,一个是做好记录,以后如果忘记了还能尽快找回来,第二个是写写博文,算是练练手笔吧. 言归正传,这次写的是Ja ...

  5. 支持Json进行操作的Javascript类库TAFFY DB

    前段时间工作中用到Json数据,希望将一些简单的增删改查放到客户端来做,这样也能减少服务器端的压力.分别查找了几个可以对Json进行操作的javascript 类库,最终选定了TAFFY DB.原因如 ...

  6. 5款帮助简化的HTML5 Audio开发的Javascript类库

    HTML5的audio标签提供了我们方便控制声音的功能,可是使用原生的HTML5来开发声音或者音乐相关的项目仍旧很的麻烦.在今天这篇文章中,我们将介绍5款帮助你简化开发的javascript audi ...

  7. 超酷的实时颜色数据跟踪javascript类库 - Tracking.js

    来源:GBin1.com 今天介绍这款超棒的Javascript类库是 - Tracking.js,它能够独立不依赖第三方类库帮助开发人员动态跟踪摄像头输出相关数据. 这些数据包括了颜色或者是人, 这 ...

  8. 12个非常不错的javascript类库

    Javascript是一个解释性的编程语言.最初作为浏览器的一部份在浏览器中运行,可以和用户交互,并且控制浏览器,异步通讯,修改显示的document.在这篇文章中,我们收集了12款最新的Javasc ...

  9. 【javascript类库】zepto和jquery的md5加密插件

    [javascript类库]zepto和jquery的md5加密插件 相信很多人对jQuery并不陌生,这款封装良好的插件被很多开发者使用. zepto可以说是jQuery在移动端的替代产品,它比jQ ...

随机推荐

  1. EXCEL 2010学习笔记 —— VLOOKUP函数 嵌套 MATCH 函数

    match index vlookup 等函数都是查找引用类函数,需要查找的时候关键变量只有两个,区域+位置,区域的选择注意是否需要锁定,位置的确定可以通过输入特定的行号和列号. match() ma ...

  2. Integer与int的区别

    简述:int与Integer的区别: 对于它们,我们可能只是知道简单的区别.Integer是int的一个封装类,int的初始值为0,而Integer的初始值为null.但是他们之间真的仅仅只有这些区别 ...

  3. Linux远程执行Shell命令或脚本

    ## 远程执行shell命令 ssh [user]@[server] '[command]' # eg. ssh root@192.168.1.1 'uptime' ## 远程执行本地shell脚本 ...

  4. C语言中的system函数参数及其作用

    函数名: system 功   能: 发出一个DOS命令  用   法: int system(char *command);  system函数已经被收录在标准c库中,可以直接调用 system() ...

  5. 设计模式--外观模式Facade(结构型)

    一.外观模式 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观模式定义了一个高层接口,让子系统更容易被使用. 二.UML图 三.例子 举个编译器的例子,假设编译一个程序需要经过四个步骤: ...

  6. Markdown 语法说明(持续更新-20160822)

    Markdown 是一种轻量级的「标记语言」.Markdown 语法的目标是:成为一种适用于网络的书写语言.Markdown 的语法简单,熟悉Markdown语法规则,事倍功半. 语法 插入图片如何定 ...

  7. Xcode7下模拟器输入文本无法显示系统键盘的解决办法

    xcode7下的ios模拟器输入内容无法系统键盘,只能用电脑键盘输入内容,这样可能会对调试带来麻烦. 其实xcode7下的ios模拟器默认只能使用一种,要么是模拟器系统键盘,要么就是是电脑键盘.设置方 ...

  8. java程序性能优化

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  9. CrashMonkey4IOS App测试

    下载地址:https://github.com/vigossjjj/CrashMonkey4IOS 根据下载地址里面的说明安装一下,以下进行配置 1.进入CrashMonkey4IOS-master/ ...

  10. 51nod1240(莫比乌斯函数)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1240 题意:中文题诶- 思路:直接暴力筛选就好了... 代码 ...