`

JavaScript中的对象

阅读更多
1. 引言
在JS中,对象是一种基本数据类型,也是最重要的数据类型。对象是一个无序的属性集合,每个属性都有自己的名字和值。JS中没有“类”的概念哦!
2. 对象的创建
//创一空对象,即无属性
var o=new Object();

//内部构造函数创对象
var now=new Date(); //当前日期
var new_year=new Date(2008,1,1);//表示2008年1月1日

//自定义构造函数以任何希望的方式初始化新创建的对象

//对象直接量来创建并初始化新对象,在JS1.2及以后版本中实现
var circle={x:0, y:0, radius:2}
3. 属性的设置、查询、枚举,未定义的属性
//属性的设置
var book=new Object();
book.title=”Love me, Love my dog”
book.chapter1=new Object();//注意对象嵌套喽
book.chapter1.title=”Love me”;

//属性的查询
alert(“Chapter 1” + book.chapter.title +”\n\t”);

//属性的枚举
function Display(obj){
var names=””;
for(var name in obj) names+=name+”\n”;
alert(names);
}

//未定义的属性
当读取一个不存在(即没被赋值)的属性时,返回undefined
可用delete来删除一个对象的属性,如delete book.chapter1;
4. 构造函数
function Rectangle(w, h){
this.width=w;
this.height=h;
}
var rect1=new Rectangle(2, 2.5);
构造函数通常没有返回值,它们只是初始化由this值传递进来的对象。但是,构造函数可以返回一个对象值,如果这样做,被返回的对象就成了new表达式的值。在这种情况下,this值所引用的对象就被丢弃了。
5. 方法
方法,就是通过对象调用的JS函数。
Method 1:
function compute_area(){
return this.width*this.height;
}
var page=new Rectangel(2,3);
page.area=compute_area; //通过把函数赋予对象的属性,来定义一个方法
var a=page.area();

Method 2:
function Rectangle_area(){
return this.width*this.height;
}
function Rectange_enlarge(){
this.width*=2;
this.height*=2;
}
function Rectange(w, h){
this.width=w;
this.height=h;

this.area=Rectange_area;
this.enlarge=Rectangle_enlarge;
}
var r=new Rectangle(2,2);
var a=r.area();
r.enlarge();

Method 3: 原型对象和继承
用构造函数把方法赋予它要初始化的对象,效率非常低。如果这样做,那么构造函数创建的每一个对象都会有相同的方法属性的副本,浪费内存呢简直是。有一种更为有效的方式可以用来声明方法、常量以及其他能被类的所有对象共享的属性。
JS对象都“继承”原形对象的属性。每个对象都有原型对象,这个原型对象是由构造函数定义的(其实,JS中所有函数都有prototype属性)。继承是在查询一个属性值时自动发生的,属性并非从原型对象复制到新的对象的。
JS必须强化读写属性值之间的不对称性。因为读对象o的属性p时,JS首先检查o是否有p属性,有则用,没有则查prototype中有没有p属性。但是写对象o的属性p时,JS并不使用原型对象(显然了,你突然写进去一属性,原来继承该原型对象的对象们怎么办啊)。这就和java C++等区别开了,java等的属性一开始就确定了,但是JS可以随时声明随时用。而且java等类里定义方法,而JS里没类概念,所以方法的定义也略显个性。
function Circle(x,y,r){
this.x=x; this.y=y; this.z=z;
}
new Circle(0,0,0);//在JS1.1中,这将创建原型对象
Circle.prototype.pi=3.141593; //看这里
function Circle_circumference(){return 2*this.pi*this.r;}
Circle.prototype.circumference=Circle_circumference; //看这里
Circle.prototype.area=function(){return this.pi*this.r*this.r;}//看这里
var c=new Circle(0.0, 0.0, 1.0);
var a=c.area();
var p=c.circumference();

其实像String Date这样的内部类也有Prototype对象,我们也可以给它们赋值。
6. JS 如何面向对象
像Java C++这些经典的面向对象程序设计语言,共有的概念是强类型和支持以类为基础的继承机制,JS不符合,那为什么JS又是面向对象语言呢?JS大量地使用了对象,而且以原型对象为基础的继承机制,所以说它又面向对象。
虽然JS不是一种以类为基础的面向对象程序设计语言,但它可以模拟以类为基础的语言。JS模拟实例属性、实例方法、类属性、类方法
function Circle(radius){
this.r=radius;
}
Circle.PI=3.14159;
function Circle_area(){return Circle.PI*this.r*this.r;}
Circle.prototype.area=Circle_area;
function Circl_max(a,b){
if(a.r > b.r) return a; else return b;
}
Circle.max=Cirlce_max;

var c=new Cirlce(1.0);
c.r=2.2; //设置实例属性
var a=c.area();//调用实例方法
var x=Math.exp(Cirlcle.PI);//使用类属性
var d=new Cirlce(1.2);
var bigger=Circle.max(c,d);//使用类方法

原型对象本身就是一个成群结队,它是由构造函数Object()创建的,这就意味着原型对象继承了Object.prototype属性。所以在查找o.p时,先查对象o有没有p属性,没有再查Circle.prototype有没有该属性,最后再查Object.prototype对象。
7. 作为关联数组的对象
关联数组是一个数据结构,允许你动态地将任意数值和任意字符串并联在一起(自我感觉像C++里的map)。实际是JS对象在内部是用关联数组实现的。存取属性时使用“.”的表示法使它们看来像C++和Java的静态对象。
//循环地执行输入操作
var stock_name=get_name();
var shares=get_shares();
portfolio[stock_name]=shares;

//统计该用户的总股票数
var value=0;
for(stock in portfolio){
value+=get_share_value(stock)*portfolio[stock]; //股票单价*份额
}
8. 对象的属性和方法
所有的对象,都支持Object定义的属性和方法。
8.1 Constructor属性
var o=new Circle(1.0);
o.constructor = = Circle;//返回true
其实JS会为我们定义的每一个构造函数都创建一个原型对象,并且将那个对象赋给构造函数的prototype属性。原型对象初始时是非空的,在它创建之初,包括一个constructor属性,用于引用构造函数。(就这样,互相产生了关系)
8.2 toString()方法
8.3 toLocalString()方法
8.4 valueof()方法
8.5 hasOwnProperty()方法
8.6 propertyIsEnumerable()方法
8.7 isPrototypeOf()方法
没咖啡了,这些方法等我明天清醒地时候再填补吧~~
分享到:
评论

相关推荐

    JavaScript中 对象、数组的使用

    JavaScript中 对象、数组的使用

    2.JAVASCRIPT中对象的层次与继承整理.pdf

    2.JAVASCRIPT中对象的层次与继承整理.pdf

    JavaScript面向对象编程指南.pdf

    JavaScript面向对象编程是指在JavaScript语言中使用面向对象的方法来编写程序。JavaScript是一种高级的、解释型的编程语言,它支持面向对象的编程范式,允许开发者创建对象、使用继承和多态等面向对象的特性。以下是...

    javascript中数组、对象

    在JavaScript中,数组和对象是两种非常基础且重要的数据结构,它们被广泛应用于各种场景,如数据存储、逻辑处理和对象表示。这篇文章将深入探讨这两种数据类型,以及相关的操作和工具。 **一、数组** 数组在...

    javascript面向对象

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

    深入浅出JavaScript对象模型

    ### 深入浅出JavaScript对象模型 #### JavaScript对象的本质 根据ECMA262规范,ECMAScript被定义为一种基于对象的语言而非传统的面向对象语言。这意味着在JavaScript中,对象被视为存储数据的一种大型数组形式,...

    JavaScript中对象的prototype属性代码实例

    我猜一般用过JavaScript的人都看见过或者用过对象的prototype属性。这是个好东西,它可以向其原型中动态添加功能(属性和方法),但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。详细介绍:...

    Javascript面向对象编程.

    这篇博客文章可能详细讨论了如何在JavaScript中实现面向对象编程。 在JavaScript中,面向对象主要通过以下三种方式实现: 1. **构造函数(Constructor)**:构造函数是一种特殊的函数,用于创建和初始化对象。我们...

    举例讲解JavaScript中关于对象操作的相关知识

    本文将通过具体的例子,详细讲解JavaScript中关于对象操作的相关知识,帮助初学者更好地理解和使用JavaScript对象。 首先,我们来看数组到对象的转换。数组是一种特殊的对象,通常使用方括号`[]`定义,每个元素都有...

    JavaScript核心对象参考手册

    1. **全局对象Global**: JavaScript中的全局对象提供了许多内置函数,如`Math`(数学运算)、`Date`(日期和时间操作)、`JSON`(JSON解析和序列化)等。全局变量默认会成为全局对象的属性。 2. **对象创建与原型...

    javascript面向对象快速入门实例.docx

    如果在当前对象中找不到某个属性,JavaScript会查找其原型对象,直到找到该属性或到达原型链的顶端。 另一种创建对象的方式是使用`Object.create()`方法,直接指定原型对象: ```javascript var cat2 = Object....

    JavaScript面向对象编程指南

    面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的...

    JAVASCRIPT 面向对象编程精要

    面向对象编程(OOP)作为一种重要的编程范式,在JavaScript中也有独特的实现方式。 #### 二、JavaScript的特性概述 JavaScript是一种基于原型的语言,这意味着它不像传统的面向对象语言(如Java或C++)那样拥有类的...

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

    - **第三章:JavaScript中的类和对象**:详细介绍如何使用JavaScript创建类和对象。 - **第四章:继承**:探讨JavaScript中实现继承的不同方式。 - **第五章:封装和私有性**:讲解如何在JavaScript中实现封装以及...

    JavaScript的面向对象

    JavaScript的面向对象是一种重要的编程范式,它在JavaScript中通过构造函数、原型链以及类(ES6引入)来实现。这篇博文将深入探讨JavaScript中的面向对象特性,包括类的概念、对象的创建、继承机制以及封装。 首先...

    JavaScript内置对象相关介绍及用法

    JavaScript内置对象相关介绍及用法ppt JavaScript内置对象相关介绍及用法

    javascript对象转换成json

    - 如果对象中有循环引用(即一个对象引用了另一个,而另一个又引用了第一个),`JSON.stringify()`会抛出一个错误。 - 当使用`replacer`函数时,可以通过返回undefined来排除某个属性不被包含在JSON字符串中。 ### ...

    JavaScript中对象介绍

    在JavaScript中,对象是一种复合数据类型,它将很多值(原始值如数字、字符串、布尔值等,以及其他对象)聚合在一起,可以通过名称访问这些值。 ### 对象的创建 在JavaScript中,对象可以通过两种主要方式创建: ...

    一文理清 JavaScript 中对象的创建模式与继承模式

    一文理清 JavaScript 中对象的创建模式与继承模式 文章目录一文理清 JavaScript 中对象的创建模式与继承模式一、前言 :1. 写作目的2. 需要具备的知识点3. 阅前声明二、JavaScript 中对象的创建模式1. ( 单例模式 ) ...

Global site tag (gtag.js) - Google Analytics