javascript不是面向对象的语言,它用函数来模拟类和继承。

javascript里,提供一个类并不难:

var Person,l4, z3;

Person = function(name) {
return this.name = name;
}; z3 = new Person("z3"); l4 = new Person("l4"); z3.sayHi = function(hi) {
return alert(hi);
}; z3.sayHi("hehehe");//可以 l4.sayHi("hahaha");//报错

在这里,Person是一个类(其实就是一个函数);z3、l4分别new了一个Person。new,就是构造实例。为什么要构造,而不是将Person直接赋给它们?是因为构造实例的话,各个实例之间不会互相影响。在上面的例子中,z3定义了一个函数sayHi(),但l4并没有这个方法,并不受z3的影响。

然后加上如下语句,则l4也有sayHi()方法矣。不过,z3使用的,仍然是自己定义的那个sayHi()方法。这算是override吗?

Person.prototype.sayHi = function(hi) {
return alert("OK!" + hi);
}; z3.sayHi("hehehe"); l4.sayHi("hahaha");

在上面的例子中,Person只是一个简单的函数,虽然它同样可以供其他变量new。通常一个javascript类应该是这样子的:

[javascript] view plaincopy
  1. var Father, Son, father, son;
  2. Father = (function() {
  3. function Father(name) {//相当于构造函数了。这个构造函数很重要,下面的添加成员函数,属性,都靠它。
  4. this.name = name;
  5. }
  6. Father.prototype.sayHi = function(hi) {//这个Father,其实是指上面这个“构造函数”。prototype,是javascript函数的固有属性。
  7. return alert("" + this.name + " : " + hi);
  8. };
  9. return Father;//同样,这个Father,<span style="font-family: Arial, Helvetica, sans-serif;">是指上面的“构造函数”</span>
  10. })();
  11. Son = (function() {
  12. function Son(name) {
  13. this.name = name;
  14. }
  15. Son.prototype = new Father();//继承的诀窍在于此
  16. Son.prototype.cry = function(){ alert("噢噢噢");}//子类扩展
  17. return Son;
  18. })();
  19. son = new Son("leftfist");
  20. son.sayHi("Hello World!");

CoffeeScript主要是为了生产javascript,规避javascript的一些弊端,同时也是为了提高可读性。因此在CoffeeScript里,写类的代码类似:

  1. class Father
  2. #构造函数
  3. constructor: (name) ->
  4. @name = name
  5. sayHi:(hi) ->
  6. alert("#{@name} : #{hi}")
  7. class Son
  8. constructor: (name) ->
  9. @name = name
  10. @.prototype = new Father()
  11. son = new Son("leftfist")
  12. son.sayHi("Hello Human!")

javascript 和 CoffeeScript 里的类的更多相关文章

  1. 在JavaScript里写类层次结构?别那么做!

    从理论上讲,JavaScript并没有类.在实践中,下面的代码片段被广泛认为是JavaScript“类”的一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fu ...

  2. 《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类

    在CoffeeScript中定义类 在CoffeeScript中,使用class定义类,使用关键字new实例化对象. 给类绑定方法 class Airplane takeOff: -> cons ...

  3. CoffeeScript里的or

    CoffeeScript里的or,其实会被编译为 || 这并没有什么令人惊奇之处.我惊讶的是类似这样一个表达式: word = null hi = word or "Hello World! ...

  4. Java编程里的类和对象

    像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...

  5. JavaScript函数柯里化

    函数式 JavaScript是以函数为一等公民的函数式语言.函数在JavaScript中也是一个对象(继承制Function),函数也可以作为参数传递成函数变量.最近几年函数式也因为其无副作用的特性. ...

  6. as3调用外部swf里的类的方法

    as3项目要调用外部swf里的类有3种方法: 1.将外部的swf发布为swc,使用时将swc引用添加到相应的项目中,这应该是最简单的一种引用.不过当项目中的类或组件比较多时就会使项目发布生成的swf文 ...

  7. 使用C#或javascript将Table里的数据导出到Excel

    原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...

  8. PHP的数组值传入JavaScript的数组里

    <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html><head>       &l ...

  9. Python里的类和对象简介

    ---恢复内容开始--- Python里的类  对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模 ...

随机推荐

  1. ajax的底层前后台交互

    为什么用ajax或者它的优点: 异步加载数据,无需切换页面 更加的用户体验,局部刷新,及时验证,操作步骤简化: 节省流量 js控制数据的加载,更加灵活多用. 底层就是XMLHttpRequest对象: ...

  2. 十年后我不会log,还是活的很好啊

    混迹于互联网也一两年了,出于喜爱与生活压力依然会从事很久.迟迟不写博客,大概是觉得知识与经验积累在笔记上时不时看看就好了,而实际情况是笔记很少翻,遇到问题搜博客和百度依然是首选,故开通博客记录自己工作 ...

  3. Windows提高_1.2遍历进程、遍历模块

    进程 什么是进程? 通俗的来讲,进程就是一个运行中的程序,最少包含一个虚拟空间,通常是 4 GB大小,一组提供数据和代码的模块,通产是 dll 和 exe 文件,一个进程内核对象和最少一个线程. 进程 ...

  4. 取得数据库中数据 查询条件where使用规则

    string where = string.Format("DnX < {0} and DnD > {0} and Types = '{1}' and Type1 = '{2}' ...

  5. CAD使用SetxDataLong写数据(网页版)

    主要用到函数说明: MxDrawEntity::SetxDataLong 写一个long扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据名称 n ...

  6. 牛客多校Round 3

    Solved:2 rank:306 跑路场..... A.PACM team 简单背包记录路径都写挂 退役算了 #include <bits/stdc++.h> using namespa ...

  7. POJ2152 Fire (树形DP)

    题意:n个城市n-1条边 组成一棵树 在每个城市修建消防站会有一个花费costi 每个城市能防火当且仅当地图上距离他最近的消防站距离小于di   问如何修建消防站 使地图上所有的城市都有预防火灾的能力 ...

  8. vue-quill-editor富文本焦点问题

    vue-quill-editor富文本渲染完成自动获取焦点,问题在于数据请求完成,富文本内容发生变化从而自动获取焦点 mounted() { this.$refs.myQuillEditor.quil ...

  9. java面试题链接

    http://blog.csdn.net/jackfrued/article/details/17339393

  10. 【webpack插件使用】在开发中快速掌握并使用Webpack构建web应用程序

    1.webpack-dev-server插件的基本使用 入门程序 const path = require('path'); // 导出一个Webpack的配置对象(通过node中的模块操作,向外暴露 ...