首页 > 基础设施 > 正文

解析:JavaScript开发创建类

2012-06-29 16:33:13  来源:it168网站

摘要:JavaScript 中的类口碑并不太好,因为“不够JavaScript”而饱受批评。jQuery 并没有涉及太多架构方法和继承模式,这让JavaScript 开发者确信自己不必考虑太多架构性的东西....
关键词: JavaScript

    对于静态的来说,JavaScript 对象直接量就已经够用了,但它对使用继承和实例来创建经典的往往更有帮助。有必要强调一下:JavaScript 是基于原型的编程语言,并没有包含内置的实现。但通过JavaScript 可以轻易地模拟出经典的


    JavaScript 中的口碑并不太好,因为“不够JavaScript”而饱受批评。jQuery 并没有涉及太多架构方法和继承模式,这让JavaScript 开发者确信自己不必考虑太多架构性的东西,甚至觉得的用处不大或干脆禁用。实际上,是另一种有用的工具,作为一名实用主义者,我相信JavaScript 中的重要性丝毫不亚于它在其他现代编程语言中的重要性。


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


    new 运算符改变了函数的执行上下文,同时改变了return 语句的行为。实际上,使用new和构造函数很似于传统的实现了的语言:


    var Person = function(name) {


    this.name = name;


    };


    // 实例化一个Person


    var alice = new Person('alice');


    // 检查这个实例


    assert( alice instanceof Person );


    构造函数的命名通常使用驼峰命名法,首字母大写,以此和普通的函数区分开来,这是一种习惯用法。记住这一点非常重要,因为你不会希望用省略new 前缀的方式来调用构造函数。


    // 不要这么做!


    Person('bob'); //=> undefined


[page]    这个函数只会返回undefined,并且执行上下文是window(全局)对象,你无意间创建了一个全局变量name。调用构造函数时不要丢掉new 关键字。


    当使用new 关键字来调用构造函数时,执行上下文从全局对象(window)变成一个空的上下文,这个上下文代表了新生成的实例。因此,this 关键字指向当前创建的实例。尽管理解起来有些绕,实际上其他语言内置机制的实现也是如此。


    默认情况下,如果你的构造函数中没有返回任何内容,就会返回this——当前的上下文。要不然就返回任意非原始型的值。比如,我们可以返回一个用以新建一个新的函数,第一步要做的是创建自己的模拟库:


    var Class = function(){


    var klass = function(){


    this.init.apply(this, arguments);


    };


    klass.prototype.init = function(){};


    return klass;


    };


    var Person = new Class;


    Person.prototype.init = function(){


    // 基于Person 的实例做初始化


    };


    // 用法:


    var person = new Person;


    令人费解的是,由于 JavaScript 2规范从未被实现过,class 一直都是保留字。最常见的做法是将变量名class 改为_class 或klass。


第三十四届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:liangxuejuan

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。