`
joshokn
  • 浏览: 103379 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

JavaScript与面向对象[旧作迁移]

阅读更多
2006年09月21日 星期四 13:42

<script language="javascript" type="text/javascript">
<!--

// Object Literals

timObject = {
property1 : "Hello",
property2 : "MmmMMm",
property3 : ["mmm", 2, 3, 6, "kkk"],
method1 : function(){alert("Method had been called" + this.property1)}
};

timObject.method1();
alert(timObject.property3[2]) // will yield 3

var circle = { x : 0, y : 0, radius: 2 } // another example

// nesting is no problem.
var rectangle = { 
upperLeft : { x : 2, y : 2 },
lowerRight : { x : 4, y : 4}
}

alert(rectangle.upperLeft.x) // will yield 2

//-->
</script>


next we will introduce the  Encapsulation of js:

// C# Pet class

public class Pet
{
    private string name;

    public Pet(string name)
    {
        this.name = name;
    }

    public string GetName()
    {
        return name;
    }
}


we will use as follows :

Pet p = new Pet("Max");
System.Console.WriteLine(p.GetName());

but in js we use this character as these:

// JavaScript Pet class

function Pet(name) {
    this._name = name;
}

Pet.prototype._name;

Pet.prototype.getName = function() {
    return this._name;
}

var p = new Pet("Max");
alert(p.getName());


Inheritance :

// C# Dog class

public class Dog : Pet
{
    public Dog(string name) : base(name)
    {
    }

    public void WagTail()
    {
        // Wagging
    }
}

// C# Cat class

public class Cat : Pet
{
    public Cat(string name) : base(name)
    {
    }

    public void Purr()
    {
        // Purring
    }
}


But in js:

// JavaScript Dog class

function Dog(name) {
    Pet.call(this, name);
}

Dog.prototype = new Pet();

Dog.prototype.wagTail = function() {
    // Wagging
}

// JavaScript Cat class

function Cat(name) {
    Pet.call(this, name);
}

Cat.prototype = new Pet();//cat的某个属性是pet这个对象,然后用声明的这个

                          //属性去继承pet的属性。

Cat.prototype.purr = function() {
    // Purring
}


Polymorphism:

In C#:
// C# Pet class

public class Pet
{
    // ...

    public virtual void Speak()
    {
        System.Console.WriteLine(GetName() + " says...");
    }
}

// C# Dog class

public class Dog : Pet
{
    // ...

    public override void Speak()
    {
        base.Speak();
        System.Console.WriteLine("woof");
    }
}

// C# Cat class

public class Cat : Pet
{
    // ...

    public override void Speak()
    {
        base.Speak();
        System.Console.WriteLine("meow");
    }
}


In JavaScript:
// JavaScript Pet class
// ...

Pet.prototype.speak = function() {
    alert(this.getName() + " says...");
}

// JavaScript Dog class
// ...

Dog.prototype.speak = function() {
    Pet.prototype.speak.call(this);
    alert("woof");
}

// JavaScript Cat class
// ...

Cat.prototype.speak = function() {
    Pet.prototype.speak.call(this);
    alert("meow");
}


ECMAScript中创建工厂模式:(是不是很象java --factory pattern)
function createFruit() {
  var tempFruit = new Object;
  tempFruit.name = "apple";
  tempFruit.number = 5;
  tempFruit.showName = function() {
  alert(this.name);
};
return tempFruit;
}

var Fruit1 = creatFruit();
var Fruit2 = creatFruit();
<后记2006-10-13>:今天又发现js与xml可以很好的结合,真是太完美了,它虽然在客户端不支持file的
操作,但这样可以极大的提高安全性,microsoft为了支持这个功能居然冒天下之大不韪,最后还不是被黑客利用。
快哉快哉!
js对xml的操作与java对xml的操作及其类似,如:getAttribute();...


------------------------------------------------------------------
javascript的原型机制:
引用
每个JavaScript对象都有原型对象,对象都继承原型对象的所有属性。一个对象的原型是由创建该对象的构造函数定义的。JavaScript的所有函数都有一个名为prototype的属性,该属性引用了原型对象,该原型对象初始化的时候只有 constructor属性来引用创建该原型对象的对象。JavaScript没有Class定义类的概念,构造函数就定义了类,并初始化类中的属性,每个类的成员都会从原型对象中继承相同的属性,也就是说,原型对象提供了类的实例共享的属性和方法,这就节约了内存。
  当读取一个对象的属性的时候,JavaScript会先从对象中查找,如果没有查找到,才会到原型对象中查找该属性(或方法),所以,尤其是对于方法,最好保存到原型对象中以便于共享,并且达到节省内存的目的,而且原型对象还有一个强大的功能,那就是如果通过构造函数实例化一些对象后,再给构造函数的原型对象增加属性和方法,那么它原来实例化的对象实例将会继承这些增加的属性和方法。

--------------------------------------------------------------------
new在java、c++中是关键字,javascript中的new则完全不同,它看似和function()绑定在一起。
--------------------------------------------------------------------
函数和方法在javascript中是数据!
--------------------------------------------------------------------
js中类属性的概念很像static关键字(java),类属性只有一个(实例属性可以因为创建了N个对象实例而又N个);js中类方法就如同static方法(java),因为它是与类关联在一起的,所以this操作符对它来讲毫无意义!
分享到:
评论
1 楼 joshokn 2006-10-26  
时至今日,才明白this的用处,感叹感叹!
java中的类中方法是可以很自然的去操作类中的属性的;可是在js中是要引用this的!(看了那么多文章,方到用时才明白其意,惭愧惭愧)

相关推荐

    Javascript 面向对象的JavaScript进阶

    在面向对象的JavaScript中,类的成员可以根据它们与类和对象的关系分为“类成员”和“实例成员”。 ##### 8.2.1 实例属性和实例方法 **定义:** 实例成员包括实例属性和实例方法。每个对象实例都有自己的实例属性...

    JavaScript面向对象编程指南

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。, 《JavaScript面向对象编程指南》着重介绍...

    JAVASCRIPT 面向对象编程精要

    ##### 3.1 变量与对象 在JavaScript中,创建对象可以通过以下方式: ```javascript let person = { name: "John Doe", age: 30 }; ``` 访问对象的属性也很简单: ```javascript console.log(person.name); // 输出...

    javascript面向对象编程

    JavaScript作为一门浏览器语言的核心思想;...如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。

    第15章 javascript面向对象与原型

    在深入讲解JavaScript面向对象与原型的知识点之前,首先需要了解JavaScript的基础知识。在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是...

    javascript面向对象编程.pdf

    JavaScript的面向对象编程与其他支持对象能力的语言存在不同。其对象构造器和方法的创建,以及对对象属性的存取方式,都体现出其独特性。例如,一个课程(Lecture)对象构造器,它接收两个字符串参数作为课程名称和...

    面向对象JavaScript开发

    JavaScript,作为一种广泛应用...JavaScript 面向对象程序设计——继承与多态.pdf 和 JavaScript 面向对象程序设计——封装.pdf 这两个文档可能深入探讨了这些主题,帮助读者深入理解并掌握JavaScript的面向对象开发。

    JavaScript面向对象编程指南.pdf

    JavaScript面向对象编程指南.pdf

    JavaScript面向对象编程指南 pdf

    1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { name: 'John Doe', age: 30, sayHello: function() { console.log('...

    Javascript面向对象编程

    ### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...

    JavaScript面向对象精要(英文版)

    ### JavaScript面向对象精要 #### 一、概述 《JavaScript面向对象精要》是一本深入讲解JavaScript面向对象编程原理的专业书籍。本书由知名的前端开发者Nicholas C. Zakas撰写,全面介绍了JavaScript作为一种动态...

    JavaScript面向对象基础.ppt

    在JavaScript中,面向对象编程(OOP)是其核心概念之一,允许开发者通过类和对象来组织和管理代码,提高代码的可重用性和可维护性。 8.1 面向对象术语 面向对象编程的基础包括类、对象、继承和多态等概念。类是对象...

    基于JavaScript的面向对象程序设计研究.pdf

    基于JavaScript的面向对象程序设计研究 本文对基于JavaScript的面向对象程序设计进行了深入研究。研究发现,JavaScript语言具有良好的面向对象特性,特别是在封装性、继承性和多态性等方面。本文对JavaScript的面向...

    JavaScript学习深入—面向对象编程

    ### JavaScript学习深入—面向对象编程 #### 一、JavaScript中的类型概述 JavaScript作为一种动态的、弱类型的语言,其核心特点之一在于它灵活的对象模型。尽管JavaScript的基础架构支持面向对象编程(OOP),但在...

    javascript面向对象

    本文旨在深入解析JavaScript面向对象编程的基础,包括对象的基本概念、类与对象的关系、对象的属性与方法、封装、继承与多态,以及JavaScript中对象的实现方式。 #### 对象的基本概念 面向对象编程的核心在于对...

    JavaScript 关于面向对象

    JavaScript 关于面向对象

Global site tag (gtag.js) - Google Analytics