`
biyeah
  • 浏览: 201379 次
  • 来自: ...
社区版块
存档分类
最新评论

ruby与javascript面向对象编程的比较

    博客分类:
  • Ruby
阅读更多
原文:http://howtonode.org/object-graphs-3

作者分析了ruby与javascript两者在面向对象模式的区别,作者用图形表达这两者在面向对象模式上的区别,值得一看。这里只摘取重点部分,有兴趣的读者可看原文。
Ruby
先来看一个简单的字符串:
animal = "cat"

对象图如下:

引用
Notice that every object has a class. Our string is of class String which inherits from the class Object. It's class String is of class Class which inherits Module and then Object.


再来看JavaScript
var animal = "cat";


引用
Remember that you can simulate classes in JavaScript using constructor + prototype pairs. That's just what the built-in object types do. The prototypes are objects and thus inherit directly from Object.prototype and the constructors are functions and inherit from Function.prototype.


对象私有方法,注意这里说的是对象,而不是类。类的私有方法在类的声明中用private修饰。而对象私有方法是指一个对象的方法相对同类的其它对象是私有的。如下代码:
animal = "cat" #animal对象已被创建
def animal.speak #在animal对象已被创建后,可赋于其新的方法,该方法不能被同类的其它对象共享,所以是私有的
  puts "The #{self} says miaow"
end
animal.speak
puts animal.upcase


引用
Notice that it injected a new anonymous class directly in front of the object and put the new method there for you. This class is hidden though. If you call the animal.class() then you'll get a reference to String directly.


来看javascript
var animal = /cat/;
animal.speak = function speak() {
  console.log("The " + this + " says miaow");
};
animal.speak();
animal.test('caterpiller');

可以看到实现方式与 ruby相类似。


定义类
Ruby
class Dave
end



Javascript
function Dave() {}



类方法
ruby
# Make a parent class
class Person
  # with an instance method
  def greet
    puts "Hello"
  end
  # and a class method.
  def self.create
    self.new
  end
end

# Create a subclass
class Dave < Person
end
# and test it.
puts Dave.create
puts Dave.new
Dave.create.greet


引用
You see that it inserted a new anonymous class in the chain to store the create method


javascript
// Make a parent class
function Person() {}
// with an instance method
Person.prototype.greet = function greet() {
  console.log("Hello");
}
// and a class method.
Person.create = function create() {
  return new this();
};

// Create a subclass
function Dave() {}
Dave.__proto__ = Person;
Dave.prototype.__proto__ = Person.prototype;
// and test it.
console.log(Dave.create());
console.log(new Dave);
Dave.create().greet();


引用
Here we make the constructor inherit from it's parent constructor (so that "class methods" get inherited) and inherit the prototypes so that "instance methods" get inherited. Again there is no need for hidden classes since javascript allows storing function properties on any object.
分享到:
评论

相关推荐

    javascript面向对象编程

    资源名称:Javascript面向对象编程   内容简介: 从语言的视角来看,面向对象的程序设计和面向对象的Javascript 语言绝对不是什么摩登的  东西;Javascript 最开始就是被设计成一...

    讲解JavaScript的面向对象的编程

    本人一行注释一行代码翻译了该大师的艺术作品--目的说明它是在第1,2阶段文档演示的JavaScript面向对象的书写方式的进一步改进,它是现代JavaScript面向对象编程方式(使用基本类来编码)的过渡代码--没有它就没有当今...

    个人健康档案系统-Ruby-JavaScript-下载

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁优雅的语法和强大的元编程能力受到开发者喜爱。JavaScript则是一种广泛用于网页和网络应用的脚本语言,尤其在前端开发中扮演着核心角色。 Ruby在后端开发中的...

    prototype_oop_javascript_ruby_prototype_

    标题 "prototype_oop_javascript_ruby_prototype_" 暗示了我们将探讨的是关于原型(Prototype)面向对象编程(Object-Oriented Programming, OOP)的概念,主要关注JavaScript和Ruby这两种语言之间的相似性和差异性...

    使用Alexa控制色调灯_Ruby_JavaScript_下载.zip

    2. **Ruby**: 是一种面向对象的、动态类型的编程语言,常用于Web开发和脚本编写,具有简洁的语法和强大的库支持。 3. **JavaScript**: 是一种广泛应用于网页和网络应用的编程语言,主要用于客户端的前端开发,但也...

    JS.Class 2.1发布 Ruby风格的JavaScript.zip

    JS.Class是JavaScript的一个库,它提供了类似于Ruby的面向对象编程机制。它通过模拟类的概念,使JavaScript代码结构更加清晰,易于理解和扩展。JS.Class 2.1是在2.0基础上的一次重大升级,主要优化了性能,增加了新...

    ruby(前途大好的ruby+rains)

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。它由日本人松本行弘(Yukihiro Matsumoto)在1995年设计并开发,旨在提高程序员的生产力,降低代码的复杂性。Ruby的哲学...

    [JavaScript权威指南(第6版)]

    本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增的章节包括jQuery、服务器端JavaScript、图形编程以及 JavaScript式的面向对象。本书不仅适合初学者系统学习,也...

    Ruby200

    2. **了解面向对象编程**:深入理解如何定义类、继承、多态以及消息传递的概念。 3. **掌握块和闭包**:熟悉如何使用 `do..end` 和 `{}` 来定义块,以及如何利用闭包特性。 4. **实践元编程**:通过实际编写代码,...

    Ruby-Ruby编程语言的高性能实现由OracleLabs基于GraalVM构建

    Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的语法和强大的元编程能力而闻名。Oracle Labs致力于提升Ruby的性能,通过引入GraalVM来构建高性能的Ruby实现,这一实现被称为TruffleRuby。GraalVM是一个高性能...

    tagteam-dev_html_javascript_ruby_css_

    Ruby是一种面向对象的编程语言,尤其适合Web开发。在TagTeam中,Ruby可能用于服务器端逻辑,处理HTTP请求、解析RSS源、存储和检索数据。Rails框架是Ruby的一个流行选择,它提供了MVC(模型-视图-控制器)架构,使得...

    ruby on rail.pdf

    Ruby是一种高度灵活、面向对象的编程语言,它的设计理念强调了代码的可读性和简洁性。由Yukihiro Matsumoto(马特松,也被称作Matz)在1995年创建,Ruby受到了Perl、Smalltalk、Eiffel、Lisp和Python等多种语言的...

    EmpowerCuriosityRedshift分析平台_JavaScript_Ruby_下载.zip

    Ruby是一种简洁、易读的面向对象编程语言,它在Web开发领域特别是Rails框架中有着广泛的应用。在EmpowerCuriosity Redshift分析平台中,Ruby可能用于构建后端服务,处理数据导入导出、数据库管理和任务调度等任务。...

    Ruby-rabl普通的ruby模板包含jsonbsonxmlplist和msgpack支持

    Ruby是一种动态、面向对象的编程语言,而RABL(Ruby API Builder Language)是Ruby社区中一个流行的模板库,专门用于生成结构化的数据输出,如JSON、BSON、XML、Plist和MsgPack。这些格式在Web开发中尤其重要,因为...

    主流编程语言-WLP.pdf

    编程语言是计算机程序设计的基础,它们提供了人与计算机之间的沟通桥梁。本文主要探讨了六种主流编程语言:C、C++、Java、.NET、Ruby和JavaScript,以及它们各自的特点和用途。 【C语言】 C语言是由丹尼斯·里奇和...

    图解 ruby_c++_CoffeeScript

    接下来是 C++,这是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。C++ 诞生于1983年,由Bjarne Stroustrup对C语言进行扩展和改进。C++ 强调性能和低级别...

    javascript-is-like-ruby:讨论JavaScript如何变得越来越像Ruby

    5. **面向对象**:Ruby 的面向对象编程非常强大,它支持多重继承和元编程。JavaScript 以前依赖原型链实现继承,但在 ES6 中引入了类的概念,更接近传统的面向对象模型,同时也支持元编程特性。 6. **闭包和迭代器*...

    ruby-1.9.1-p0-i386-mswin32.rar

    Ruby是一种面向对象的、动态类型的编程语言,由Yukihiro "Matz" Matsumoto于1995年创建。它的设计目标是让编程变得更加简洁、优雅,强调代码的可读性和开发者的生产力。Ruby 1.9.1是该语言的一个重要版本,引入了...

    Ruby-Hanami是一个全栈的Ruby的Web框架

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、易读的语法受到开发者们的喜爱。在Web开发领域,Ruby最知名的框架当属Ruby on Rails(简称Rails),它极大地推动了Web开发的革命,提倡"DRY(Don't Repeat ...

Global site tag (gtag.js) - Google Analytics