原文:
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 最开始就是被设计成一...
原型是JavaScript面向对象编程的一个核心概念,每个对象都有一个原型对象,通过它可以继承其他对象的属性和方法。 程序示例分析: 在文档提供的代码示例中,Lecture类和Schedule类展示了如何在JavaScript中实现面向...
本人一行注释一行代码翻译了该大师的艺术作品--目的说明它是在第1,2阶段文档演示的JavaScript面向对象的书写方式的进一步改进,它是现代JavaScript面向对象编程方式(使用基本类来编码)的过渡代码--没有它就没有当今...
总的来说,JavaScript面向对象编程虽然与其他语言的实现有所不同,但其核心概念和编程范式是一致的。通过理解这些基础概念,开发者可以更加灵活和高效地使用JavaScript进行软件开发。对于想要深入了解JavaScript面向...
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 并行编程语言 数据分析编程语言 数据库查询语言 系统编程语言 ...面向对象编程语言 等所有常见的变成语言系列教程
- **面向对象编程**:深入讲解了Ruby中的类、模块、继承等面向对象编程特性。 - **核心库和工具**:详细介绍了Ruby标准库中的一些重要模块,如数组、哈希表等,并探讨了常用的Ruby工具和环境配置方法。 - **高级...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁优雅的语法和强大的元编程能力受到开发者喜爱。JavaScript则是一种广泛用于网页和网络应用的脚本语言,尤其在前端开发中扮演着核心角色。 Ruby在后端开发中的...
标题 "prototype_oop_javascript_ruby_prototype_" 暗示了我们将探讨的是关于原型(Prototype)面向对象编程(Object-Oriented Programming, OOP)的概念,主要关注JavaScript和Ruby这两种语言之间的相似性和差异性...
2. **Ruby**: 是一种面向对象的、动态类型的编程语言,常用于Web开发和脚本编写,具有简洁的语法和强大的库支持。 3. **JavaScript**: 是一种广泛应用于网页和网络应用的编程语言,主要用于客户端的前端开发,但也...
本书《Pro JavaScript》中文版不仅介绍了现代JavaScript编程的基础知识,还深入探讨了面向对象编程在JavaScript中的应用。通过实际案例,读者可以学习到如何使用面向对象的方法来构建复杂的JavaScript应用程序。此外...
JS.Class是JavaScript的一个库,它提供了类似于Ruby的面向对象编程机制。它通过模拟类的概念,使JavaScript代码结构更加清晰,易于理解和扩展。JS.Class 2.1是在2.0基础上的一次重大升级,主要优化了性能,增加了新...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。它由日本人松本行弘(Yukihiro Matsumoto)在1995年设计并开发,旨在提高程序员的生产力,降低代码的复杂性。Ruby的哲学...
本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增的章节包括jQuery、服务器端JavaScript、图形编程以及 JavaScript式的面向对象。本书不仅适合初学者系统学习,也...
2. **了解面向对象编程**:深入理解如何定义类、继承、多态以及消息传递的概念。 3. **掌握块和闭包**:熟悉如何使用 `do..end` 和 `{}` 来定义块,以及如何利用闭包特性。 4. **实践元编程**:通过实际编写代码,...
Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的语法和强大的元编程能力而闻名。Oracle Labs致力于提升Ruby的性能,通过引入GraalVM来构建高性能的Ruby实现,这一实现被称为TruffleRuby。GraalVM是一个高性能...