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. myEclipse 2014 破解教程

    因为经常在不同电脑里安装配置下载myEclipse,所以干脆记录下来,一直找度娘也是很麻烦的. 此教程仅对myEclipse2014 有效. 破解工具:https://pan.baidu.com/s/ ...

  2. JavaWeb -- Jsp中的 EL表达式

    lEL 全名为Expression Language.EL主要作用: l获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web ...

  3. mysql: instr 多个字段 like数据

    你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种. SELECT * FROM `order_shop` where instr(uuid,  'b') > 0 g ...

  4. python中的数据类型和常用运算符

    一. python中常见的数据类型 1. 整数:任何时候运算都是精确的 2. 浮点数:运算的时候,可能会有四舍五入 3. 字符串:字符串是以单引号'或双引号"括起来的任意文本 1) 同类型的 ...

  5. mysql 开发标准规范

    一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过12个字符. 3. 库名.表名.字段名见名知意,尽量使用名词而不是动词. 4. 优先使用InnoDB存储引 ...

  6. 关于 freetds pymssql 的安装部署

    关于 freetds pymssql 的安装部署一.安装: (freetds-0.91 pymssql 2.0.1) 如果要在linux机器 连mysqlsever 1.需要安装freetds./co ...

  7. Oracle hash分区的秘密

    转自:http://www.hellodb.net/2009/12/hash_partition.html 在面试时经常会问一个问题,请列举出hash在数据库内部的应用,hash的原理虽然简单,但是它 ...

  8. LeetCode Perfect Number

    原题链接在这里:https://leetcode.com/problems/perfect-number/#/description 题目: We define the Perfect Number ...

  9. springboot启动异常:java.lang.IllegalArgumentException: Could not resolve placeholder 'xxx.xxx.xxx' in value "${xxx.xxx.xxx}"

    场景: 本地启动正常,部署到服务器上启动时启动tomcat失败,显示上面的问题. 原因: 本地打包的时候没有修改指定的配置文件名称(本地只有一份配置文件). 在打包到服务器上时指定的配置文件命名会去查 ...

  10. Python 函数之递归

    递归函数定义 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 我们来计算阶乘 n! = 1 x 2 x 3 x ... x n ,用函数 fact(n) 表示 f ...