http://www.blogjava.net/zkjbeyond/archive/2006/04/16/41336.html

javascript中对象只包括属性和方法两种成员。ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。严格来说,这意味着对象是无特定顺序的值的数组。对象的创建和销毁都在 JavaScript 执行过程中发生。

一、Object对象

  Object对象是javascript中所有对象的父对象,它的所有方法和属性在所有其他对象中都可用。提供所有 JavaScript 对象共有的功能。当然这些方法可以在用户定义的对象中重新定义,JavaScript 将在适当的时候调用这些方法。

1、属性:

属性 说明
__proto__ Property 为对象指定原型。仅 IE11支持
constructor 对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。
prototype 为对象的类返回原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

var a=new Array(3);a[0]=0;a[1]=1;a[2]=2;

a.constructor;  //function Array() { [native code] };

Object.prototype.constructor;  //function Object() { [native code] };

方法:

功能

描述

Object.create 创建一个具有指定原型且可选择性地包含指定属性的对象。
Object.defineProperties 将一个或多个属性添加到对象,并/或修改现有属性的特性。
Object.defineProperty 将属性添加到对象或修改现有属性的特性。
Object.freeze 阻止修改现有属性的特性和值,并阻止添加新属性。
Object.getOwnPropertyDescriptor 返回数据属性或访问器属性的定义。
Object.getOwnPropertyNames 返回对象的属性和方法的名称。
Object.getPrototypeOf 返回对象的原型。
Object.isExtensible 返回一个值,该值指示是否可向对象添加新属性。
Object.isFrozen 如果无法在对象中修改现有属性的特性和值,且无法向对象添加新属性,则返回 true。
Object.isSealed 如果无法在对象中修改现有属性的特性,且无法向对象添加新属性,则返回 true。
Object.keys 返回对象的可枚举属性和方法的名称。
Object.preventExtensions 阻止向对象添加新属性。
Object.seal 阻止修改现有属性的特性,并阻止添加新属性。

javascript所有对象都继承自Object类。以下是Object类的一些属性。原型对象

的一些属性。

1、constructor属性
从javascript1.1开始,每个对象都有这个属性,它指向用来初始化改对象的构造

函数

 < SCRIPT LANGUAGE = " JavaScript " > 
 <!-- 
 function  Person() {} 
 var  o = new  Person();

alert( typeof (Person.constructor));
alert(o.constructor);
alert(Person.constructor);
alert(Function.constructor);
alert(Object.constructor)

alert( new  Date().constructor);
alert(Date.constructor);


 function  Man() {


Man.prototype = new  Person();
alert(Man.constructor);
o = new  Man();
alert(o.constructor)
Man.prototype.constructor = Man;
alert(o.constructor)
 // --> 
 </ SCRIPT > 

如以上代码,可以知道
a、constructor的类型是函数;
b、javascript内部实现了很多函数,如Object,Date都是函数由Function得到的


c、用原型对象实现的继承中,也要设置子类的constructor。如果你的程序中用

到了constructor,可能会出错。
2、toString()方法
相当于java Object类中toString方法。你alert()  + 等操作中就会调用这个方

法。 var s='1'+'2',会自动把'1'  '2'  转化成String对象在执行。

但数组定义自己的toString方法。alert(Array.prototype.toString)

如果对象或子类要调用父类的方法可以

 < SCRIPT LANGUAGE = " JavaScript " > 
 <!-- 
alert([ 1 , 2 , 3 ].toLocalString())
alert(Object.prototype.toString.apply([ 1 , 2 , 3 ]));
 // --> 
 </ SCRIPT >

3、toLocalString()方法 
ECMAScript v3 javascript1.5中定义了这个方法。返回局部化的值。偶还不知道

什么用法。
4、valueof()
当javascript与要将一个对象转化成字符串之外的原始类型时调用它。

5、hasOwnProperty()方法 
《javascript权威指南》说如果是非继承的属性返回true.但下列代码反映,它检

验对象的实例属性。对原型属性不会返回。

 < SCRIPT LANGUAGE = " JavaScript " > 
 <!-- 
 function  Person(name) {
     this .name = name;

 Person.prototype.setAge = function (age) {
     this .age = age;

 Person.prototype.toString = function () {
     return  'name:' + this .name + ' age:' + this .age;

 var  o = new  Person('zkj');
o.setAge( 25 );
alert(o)
alert(o.hasOwnProperty( " name " ));
alert(o.hasOwnProperty( " age " ));
alert(o.hasOwnProperty( " setAge " ));
alert(o.hasOwnProperty( " toString " ));

alert(Person.prototype.hasOwnProperty( " setAge " ));
 // --> 
 </ SCRIPT > 
 

6、propertyIsEnumerable 
《javascript权威指南》如果用能 for( in )枚举的属性,这个方法返回true;
以下代码说明《javascript权威指南》是错的。自己定义的原型对象属性可以枚

举,但返回false

 < SCRIPT LANGUAGE = " JavaScript " > 
 <!-- 
 function  Person(name) {
     this .name = name;

 Person.prototype.setAge = function (age) {
     this .age = age;

 Person.prototype.toString = function () {
     return  'name:' + this .name + ' age:' + this .age;

 var  o = new  Person('zkj');
o.setAge( 25 );
alert(o.propertyIsEnumerable('setAge'));
 var  desc = '';
 for ( var  key  in  o) {
    desc += key + '  ';
     if (o.hasOwnProperty(key)) {
        desc += ' 是实例对象 ';
 } else {
        desc += ' 不是实例对象 ';
 } 
   if (o.propertyIsEnumerable(key)) {
        desc += ' 能被枚举 ';
 } else {
        desc += ' 不能被枚举 ';
 } 
 
 desc += '\r\n';

alert(desc);

 // --> 
 </ SCRIPT > 
 

7、isPrototypeOf方法 
《javascript权威指南》如果调用对象是实际参数指定的对象的原型对象返回

true. 看代码吧。
居然alert(Object.prototype.isPrototypeOf(Person));//true也是true.搞不懂

 < SCRIPT LANGUAGE = " JavaScript " > 
 <!-- 
 function  Person(name) {
     this .name = name;

 Person.prototype.setAge = function (age) {
     this .age = age;

 Person.prototype.toString = function () {
     return  'name:' + this .name + ' age:' + this .age;

 var  o = new  Person('zkj');
o.setAge( 25 );
alert(Person.prototype.isPrototypeOf(o)); // true 
 alert(Person.isPrototypeOf(o)); // false 
 alert(o.isPrototypeOf(Person.prototype)); // false 
 alert(Function.prototype.isPrototypeOf(Person)); // true 
 alert(Object.prototype.isPrototypeOf(Person)); // true 
// --> 
 </ SCRIPT >

8、总结
看《javascript权威指南》前,就知道toString方法。现在知道了些其他的方法

,但让我更加混乱,《javascript权威指南》讲的也有错误。开发中建议大家除

了toString,其他属性方法不要覆盖也不要使用了。除了对这些方法十分清楚。就

我知道的javascript开源框架中好象没用到这些。

javascript——对象的概念——Object(未完)的更多相关文章

  1. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  2. javascript——对象的概念——内建对象

    包括内建对象的所有对象都是Object对象的子对象. 1.Array():构建数组的内建构造器函数 例:创建数组方式有两种: 2.Boolean:是对象,与基本数据类型 布尔值 不相同 例:创建Boo ...

  3. javascript——对象的概念——函数 2 (内建函数与类型转换)

    javascript 有许多内建函数,用于各种操作,以下为常用的内建方法. 1.parseInt(object,int):将输入的 int 进制的值 object 转换为 10 进制的数值: obje ...

  4. Java基本概念(未完)

    仅简单总结~辅助快速回忆~ 一.JVM 1,Java类加载机制 Java程序由多个类文件组成,按需加载. Java的动态扩展是由运行期动态加载和动态链接实现的.——动态绑定,多态. 加载步骤: 1)装 ...

  5. javascript——对象的概念——创建对象与销毁对象

    一.创建对象 1.创建空对象 方式一: var o ={};o; //Object {} typeof(o); //"object" 方式二: var o=new Object() ...

  6. javascript——对象的概念——函数 1 (函数对象的属性和方法)

    一.创建函数 函数是一种对象:Function类 是对象,可以通过 Function 实例化一个函数,不过最多的还是利用 function 来创建函数. 方式一:利用 Function类 来实例化函数 ...

  7. python 面向对象的基本概念(未完待续)

    面向对象编程简称OOP(Object-oriented-programming),是一种程序设计思想. 面向过程编程(如C语言)指一件事该怎么做,面向对象编程(如Java.python)指一件事该让谁 ...

  8. 写给大忙人的Elasticsearch架构与概念(未完待续)

    最新版本官方文档https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html文档增删改参考https://www ...

  9. Javascript之换肤(未完待续)

    这个项目我还没有完全写出来,先记录至此.感觉是方法不对,背景图片的切换方法有Problem.如若有一大神发现了我的文章,还望指导,吾将感激不尽.日后代码还会再钻研再改改. <head> & ...

随机推荐

  1. Spring boot 更改端口的几种方式

    web服务的默认端口是8080,但有时候我们需要更改成其他端口,这里有几种端口修改方式: 在application.properties文件添加配置(最简单) server.port= 在applic ...

  2. DelphiXE_画图

    1.基本 DelphiXE FireMonkey 如何画图 http://www.delphitop.com/html/FireMonkey/2647.html 2. 3.

  3. 阿里云 linux 找回mysql root密码

    不小心手贱修改了密码,而且使用phpMyAdmin这种自动生成密码,又没记录密码,真实醉了   搜了半天,问题多多,想过回滚磁盘到昨天,在阿里云已经买了付费找密码 最后终于自己解决了,其实很简单 cd ...

  4. myeclipse发布项目

    最好不要点击restart 虽然点击run,也会发布,但是最好先点击发布. 点击restart,可能会出现tomcat关不掉又启动不了.

  5. review22

    程序再运行期间,可能需要从外部的存储媒介或其他程序中读入所需要的数据,这就需要使用输入流. 程序可能经常需要获取磁盘上文件的有关信息或在磁盘上创建新的文件等,这就需要学习使用File类. 创建一个Fi ...

  6. noi2009变换序列

    noi2009变换序列 一.题目 1843 变换序列 2009年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述  ...

  7. XSS 跨站攻击

    未整理完 介绍 XSS (Cross site Scripting),跨站脚本攻击,为了区分层叠样式表css,所以叫了XSS. 对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的"缓冲区溢 ...

  8. Announcing the Release of ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 for VS2012

    The NuGet packages for ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 are now live o ...

  9. 【VS外接程序】利用T4模板生成模块代码

    引言 记得第一次做asp.net mvc项目时,可以用model直接生成Html的增删改查页面, 没什么特殊要求都可以不用修改直接用了, 觉得很神奇,效率太高了.后来在做客户端开发时,发现很多模块都是 ...

  10. Spring与RMI集成实现远程访问

    使用spring对RMI的支持,可以非常容易地构建你的分布式应用.在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter ...