`
chshevo
  • 浏览: 9739 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

JavaScript面向对象

阅读更多
本指南可以很快让你学会写优美的面向对象JavaScript代码,我保证!学会写简洁的JavaScript代码对一个开发者的发展很重要,随着像Node.js这类技术的出现,你现在可以在服务器端写JavaScript代码了,你甚至可以用JavaScript来查询像MongoDB这样的持久性数据存储。

现在开始写面向对象的JS(OO JS),如果你有什么问题或我遗漏了什么,在下面评论出告诉我。

Literal Notation

Literal Notation只是在JavaScript中创建对象的一种方法,是的,方法不止这一种。当你打算创建一个对象实例的时候Literal Notation是首选的方法。

var bill = {}; 
上面的代码没太大用处,仅仅只是创建了一个空对象。让我们动态的添加一些属性和方法到这个对象。

bill.name = "Bill E Goat";     
bill.sound = function() {
         console.log( 'bahhh!' );
     }; 
这里我们添加了“name”属性并赋值为“Bill E Goat”。我们不一定要在前面创建空对象,还可以只用一步完成上面 所有的事。

var bill = {
       name: "Bill E Goat",
       sound: function() {
         console.log( 'bahhh!'  );
       }
     }; 
很简洁漂亮是不是?访问属性和方法也一样很简单。

bill.name; // "Bill E Goat"bill.sound(); // "bahhh" 
如果属性名不是一个有效的标识符我们还可以这么访问它:

bill['name']; // "Bill E Goat" 
请注意当调用一个方法时我们要在方法名后面添加一对括号去调用它。让我们重写当前的sound方法并传给它一个参数来调用它:

bill.sound = function(noise) {
    console.log( noise);
};
bill.sound("brrr!"); // "brrr!" He's cold 
很好,我们传入了一个参数(noise),并且在方法的内部访问了它。下面我们继续添加一个方法来访问name属性:

bill.sayName = function() {
    console.log( "Hello " + this.name );
};
bill.sayName(); // "Hello Bill E Goat" 
我们可以通过this.propertyName在一个方法内部访问属性

bill.sayName; // function 
我们把一个叫sound的本地方法赋值给一个对象sound,现在可以在sound后面添加括号并传入参数调用那个方法了。如果我们试着克隆Bill会有什么结果?

var sally = bill;sally.name; // "Bill E Goat", But her name is Sally silly
sally.name = "Sally";
sally.name; // "Sally", Better
bill.name; // "Sally", Oh no what happened to Bill 
在上面的例子中我们创建了一个新的变量sally,并让它和bill相等。现在sally和bill在内存中引用同样的对象。对一个对象的改变会影响到另一个。

下面再看另外一个例子:

bill.name = "Bill E Goat";
bill.sayName(); // "Hello Bill E Goat";
var sayName = bill.sayName;
sayName; // function, OK so far so good
sayName(); // "Hello ", huh why didn't it print out Bills name? 
bill的name属性是一个本地变量,sayName方法是在全局范围内创建的,所以this.name会在全局范围内查找name的值。但问题是name没有定义。让我们来定义一个全局变量name看看会发生什么:

var name = "Bearded Octo";
sayName(); // "Hello Bearded Octo" 
在这里我们创建了一个全局变量name,并赋值“Bearded Octo”。当我们调用sayName方法时它在全局范围内查找name并访问到了值“Bearded Octo”,很好。下面看看Constructor Notation。

Constructor Notation

Constructor Notation是另外一种写面向对象JavaScript的方法。当你需要为一个对象设置初始属性值和方法或者打算创建一个对象的不同实例但他们的属性和方法都是不同的,这时首选Constructor Notation方式。下面从创建一个空对象开始:

function Game() {}; 
请注意习惯上第一个字母大写来表示它是一个类。我们来用这个类创建新的对象:

var zelda = new Game();
var smb = new Game();
zelda.title = "Legend of Zelda";
smb.title = "Super Mario Brothers";
zelda.title; // "Legend of Zelda"smb.title; // "Super Mario Brothers" 
我们的对象现在有自己的属性了!当创建对象时,我们可以在属性中传值进去,或者在后面修改。

function Game(title) {
    this.title = typeof title !== 'undefined' ? title : "";
};
var zelda = new Game("Legend of Zelda");
zelda.title; // "Legend of Zelda"
zelda.title = "Ocarina of Time";
zelda.title; // "Ocarina of Time"
var blank = new Game();
blank.title; // "" 
第二行可能有点难理解。我们使用了一个三元操作符,它只是一种可以把if else语句块写到一行的方法。他等价于下面的:

if (typeof title !== 'undefined') {
 this.title = title;
} else {
    this.title = "";
}// Is the same as
this.title = typeof title !== 'undefined' ? title : ""; 
如果这个对象创建的时候传入了title参数,对象的title属性就会被设置。如果没有传入,会被设置成默认值””。

我们可以创建一个方法来访问这个属性:

zelda.loveTitle = function() {
    console.log( "I love " + this.title );
};
zelda.loveTitle(); // "I love Ocarina of Time" 
那样看起来很整齐,但是还可以更好。我们可以给Game类添加一个方法让所有从Game类创建的对象都有这个方法:

Game.prototype.heartIt = function() {
    console.log( "I heart " + this.title );
};
zelda.heartIt(); // "I heart Ocarina of Time"
smb.heartIt(); // "I heart Super Mario Brothers 
分享到:
评论

相关推荐

    Javascript面向对象编程.

    在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...

    JavaScript面向对象编程指南.pdf

    JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在... 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库

    JavaScript面向对象编程指南

    《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码...

    JavaScript面向对象编程指南(第2版).rar

    JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。

    JAVASCRIPT 面向对象编程精要

    ### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着时间的发展,JavaScript已经成为了一种功能全面的编程语言,尤其是在Web开发...

    javascript面向对象

    ### JavaScript面向对象编程详解 #### 引言 在软件工程领域,面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。每个对象都可以包含数据(属性)和方法(行为)。JavaScript虽然起初并非为面向对象...

    javascript面向对象编程.pdf

    总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...

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

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

    Javascript面向对象编程

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

    JavaScript面向对象编程指南 pdf

    下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...

    javascript面向对象编程指南 2nd

    javascript面向对象编程指南 2nd英文版,英文名:Object-Oriented JavaScript。 What you will learn from this book The basics of object-oriented programming, and how to apply it in the JavaScript ...

    javascript面向对象编程(中文).pdf

    ### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...

    JavaScript面向对象编程指南完整版

    JavaScript面向对象编程指南是完整的扫描版...

    JavaScript面向对象编程.pdf

    JavaScript面向对象编程.pdf

Global site tag (gtag.js) - Google Analytics