阅读更多

15顶
6踩

Web前端

原创新闻 再论JavaScript的继承

2008-10-20 14:01 by 资深编辑 ╱/罒呍唲 评论(11) 有10363人浏览

Yahoo 的Stoyan Stefanov 发表了一篇好文章-JavaScript的 class-less对象

他将这篇文章发表在了JavaRanch上,在Java社区来讨论他们的不同之处。

他深入的研究了:
*JavaScript对象

这是一个空对象
var myobj = {};

你可以添加一些有用的功能:
myobj.name = "My precious";
myobj.getName = function() {return this.name};


你也可以用另一种方法来创建对象和添加属性:
var another = {
  name: 'My other precious',
  getName: function() {
    return this.name;
  }
};




*构造函数
这是一个创建构造函数的例子:
function ShinyObject(name) {
  this.name = name;
  this.getName = function() {
    return this.name;
  }
}


如今你可以这样来创建对象,更像Java:
var my = new ShinyObject('ring');
var myname = my.getName(); // "ring"


*函数的对象和属性

*继承

*复制继承的属性
假设你有这些对象:
var shiny = {
   shiny: true,
   round: true
};

var normal = {
  name: 'name me',
  getName: function() {
    return this.name;
  }
};


如何来得到这些属性:
function extend(parent, child) {
  for (var i in parent) {
    child[i] = parent[i];
  }
}

extend(normal, shiny); // inherit
shiny.getName(); // "name me"


*Crockford的beget对象:

function begetObject(o) {
  function F() {}
  F.prototype = o;
  return new F();
}



*YUI的扩展()
function extend(Child, Parent) {
  var F = function(){};
  F.prototype = Parent.prototype;
  Child.prototype = new F();
}

来自: ajaxian.com
15
6
评论 共 11 条 请登录后发表评论
11 楼 zhou363667565 2011-12-27 15:35
对学习javascript 新手来说 确实 是好东西。
10 楼 zlm_525 2010-09-13 17:45
hejin1026 写道
有什么新颖的地方吗?完全没有。。。。就把js常用的继承方式搬出来了,骗人,气死我了,一来就看到这种吸引人眼球的东西,这种文章还放在那么前面,有什么价值吗?

你还能有什么出息呢?
9 楼 mesmes 2009-09-29 14:49
function extend(Child, Parent) {
  var F = function(){};
  F.prototype = Parent.prototype;
  Child.prototype = new F();
  
  [color=red]Child.prototype.constructor = Child[/color]
}

个人觉得加一句比较好点,不知道大家怎么想?
8 楼 lemonweirui 2009-09-15 12:48
最后那两段终于亮了
7 楼 zxyjava19831226 2008-11-10 20:34
又被忽悠一把.郁闷
6 楼 caiceclb 2008-11-06 17:30
对我这种菜鸟还是蛮新鲜的!自嘲一下。
5 楼 hejin1026 2008-10-21 17:55
有什么新颖的地方吗?完全没有。。。。就把js常用的继承方式搬出来了,骗人,气死我了,一来就看到这种吸引人眼球的东西,这种文章还放在那么前面,有什么价值吗?
4 楼 xmpp 2008-10-21 09:59
这文章也....
3 楼 weidewei 2008-10-20 19:02
2 楼 egmkang 2008-10-20 18:34
没看出来什么景致
1 楼 seven_cuit 2008-10-20 16:37
正在学习javascript的对象系统,谢谢楼主分享

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Java国际认证(SCJP)典型试题1000例(中文高清影印版).zip

    Java国际认证(SCJP)典型试题1000例(中文高清影印版)

  • java 程序员 笔试题_程序员笔试考试题和答案(java)

    程序员笔试考试题和答案(java) 1. Oracle 数据库属于以下哪种数据库类型?BA . 网状数据库B. 关系数据库C. 层次数据库D. 面向对象的关系数据库2. 转发 HTTP 请求一般有两种方法,response.sendRedirect 和 RequestDispatcher.forward,哪种方法可以保存 request.setAttribute()中设置的值不丢 BA. send...

  • Java经典试题(二)

    单选题 1:关于选择结构下列( )说法是正确的。( 2 分) A:if语句和else语句必须成对出现 B:if语句可以没有else语句对应 C:switch结构中每个case语句中必须用break语句 D:switch结构中必须有default语句 答案:B 2:所谓方法重载,就是在类中创建了多个方法,它们具有相同的名称、( )。( 2 分) A:有不同的参数个数或不同的参数数据类型。 B:有...

  • java面试笔试题大汇总 ~很全面(2)

    面试要了解的问题 简单介绍一下您的情况? 您怎样描述自己? 您为何要选择我公司? 您为了这次面试做了哪些准备工作? 我们为什么要雇佣您? 为什么您要应聘这个职位? 您期望的薪金待遇是多少? 什么对您来说更加重要 — 工作还是金钱? 您期望从此职业中获得什么 — 金钱、声望还是事业成就感? 如果其他公司为您提供了更高的薪水,您会离开我公司吗? 您生活的最终目标是什么? 您怎样

  • java scjp 试题_JAVA认证历年真题:SCJP考试真题和解析[1]

    JAVA认证历年真题:SCJP考试真题和解析[1]例题1:choose the three valid identifiers from those listed below.a. idolikethelongnameclassb. $bytec. constd. _oke. 3_case解答:a, b, d点评:java中的标示符必须是字母、美元符($)或下划线(_)开头。关键字与保留字不能作为...

  • scjp题目解析(五)

     Which of the following are correct?128 >> 1 gives 64 128 >>> 1 gives 64 128 >> 1 gives –64 128 >>> 1 gives –64 Select all correct answers 首先把128化成二进制形式右移就是>>1就是去掉一个最低位就是了128/2=64 064/2=32 0

  • 判断比较两个对象是否是一个对象(equals方法)

    1.对于任何引用类型, o.equals(o) == true成立.2.如果 o.equals(o1) == true 成立,那么o1.equals(o)==true也一定要成立.3.如果 o.equals(o1) == true 成立且  o.equals(o2) == true 成立,那么  o1.equals(o2) == true 也成立.4.如果第一次调用o.equals(o1) ==

  • Java关键字解析

    Java中的关键字 Abstract  一个Java语言中的关键字,用在类的声明中来指明一个类是不能被实例化的,但是可以被其它类继承。一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现。 break  一个Java的关键字,用来改变程序执行流程,立刻从当前语句的下一句开始执行从。如果后面跟有一个标签,则从标签对应的地方开始执行。 case  Java语言的关

  • java中的关键字

    Abstract 抽象的  一个Java语言中的关键字,用在类的声明中来指明一个类是不能被实例化的,但是可以被其它类继承。一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现 break  一个Java的关键字,用来改变程序执行流程,立刻从当前语句的下一句开始执行从。如果后面跟有一个标签,则从标签对应的地方开始执行 case  Java语言的关键字,用来定义一组

  • 如何比较两个引用是否指向同一个对象?

    如何比较两个引用是否指向同一个对象?Person p1, p2;// ...Console.WriteLine( p1 == p2 );上面的代码用来判断p1和p2是否指向同一个对象,但有某种情况下,我们却不能保证其正确性,那就是当我们不能肯定Person类的定义中是否重载了“==”的时候。也许根据Person的定义,只要两个Person对象的ID属性相等,那么应用“==”就会返回true

  • SCJP真题库更新16

    QUESTION 76 A class games.cards.Poker is correctly defined in the jar file Poker.jar. A user wants to execute the main method of  Poker on a UNIX system using the command:  Java games.cards.Poker W...

  • SCJP试题十六

    1.             Wich three are valid declarations of a char?(choose three)A   char c1=064770;B   char c2=’face’;C   char c3=0Xbeef;D   char c4=/u0022;E   char c5=’/iface’;F   char c6=’/ufac

  • 9道scjp题310-035解析

    1.  Which  of  the  following  range  of  short  is  correct?  A.  -27  --  27-1  B.  0  --  216-1  C.  ?215  --  215-1  D.  ?231  --  231-1  翻译下面哪些是short型的取值范围。  答案C  解析短整型的数据类型的长度是16  bits,有符号。另外需要说

  • Java程序员笔试题

    一、单项选择题(共10题,每题2分,共20分)1.      下列说法哪一个是正确的。( B )A.Java程序经编译后会产生machine codeB.Java程序经编译后会产生bytecodeC.Java程序经编译后会产生DLLD.以上都不正确2.      提供Java存取数据库能力的包是。(  A  )A.java.sql   B.java.awt   C.java.lang   D.ja...

  • Equals 的使用方法:判定字符串是否一样

  • java keywords_java keywords 关键字

    http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.9引用3.9 Keywords50 character sequences, formed from ASCII letters, are reserved for use as keywords and cannot be used as identifiers (...

  • Java技能测试试卷二及答案

    Java技能测试试卷二 第一部分:基础部分    软件基础 (每题3分,共18分)  1、十进制数10相当于二进制数的多少?   1010  2、请写出五个基本数据类型。   byte/short/int/long/boolean    3、程序的控制语句有哪些?      4、break语句和continue语句有什么区别?   break是指中断当前语句块/

  • java compare equla_Java中的equals,==,compareTo和compare的比较

    Java中的equals(),==,compareTo()和compare()首先只有==可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较。其次任何对象都可以调用.equals()方法,因为这是从Object类继承下来的。Object.equals(Object obj)的缺省实现也是比较对象引用(显然它不知道如何比较值),但Java类库中的绝...

  • 面试题总结(自己总结)

    1、关于JaVa的描述哪一个是错误的(   ) A.Java是一种解释性语言    B.Java是面向对象的语言 C.Java通过不同硬件平台安装同一个JVM实现来实现的可移植性 D.Java可以通过API调用编译语言(如C或C++)编写的函数。 2、哪个不是Java关键字(    ) A.sizeof  B. void  C. const  D. super 3、Java语言具有

Global site tag (gtag.js) - Google Analytics