javascript——对象的概念——Object(未完)
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(未完)的更多相关文章
- javascript有用小功能总结(未完待续)
1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...
- javascript——对象的概念——内建对象
包括内建对象的所有对象都是Object对象的子对象. 1.Array():构建数组的内建构造器函数 例:创建数组方式有两种: 2.Boolean:是对象,与基本数据类型 布尔值 不相同 例:创建Boo ...
- javascript——对象的概念——函数 2 (内建函数与类型转换)
javascript 有许多内建函数,用于各种操作,以下为常用的内建方法. 1.parseInt(object,int):将输入的 int 进制的值 object 转换为 10 进制的数值: obje ...
- Java基本概念(未完)
仅简单总结~辅助快速回忆~ 一.JVM 1,Java类加载机制 Java程序由多个类文件组成,按需加载. Java的动态扩展是由运行期动态加载和动态链接实现的.——动态绑定,多态. 加载步骤: 1)装 ...
- javascript——对象的概念——创建对象与销毁对象
一.创建对象 1.创建空对象 方式一: var o ={};o; //Object {} typeof(o); //"object" 方式二: var o=new Object() ...
- javascript——对象的概念——函数 1 (函数对象的属性和方法)
一.创建函数 函数是一种对象:Function类 是对象,可以通过 Function 实例化一个函数,不过最多的还是利用 function 来创建函数. 方式一:利用 Function类 来实例化函数 ...
- python 面向对象的基本概念(未完待续)
面向对象编程简称OOP(Object-oriented-programming),是一种程序设计思想. 面向过程编程(如C语言)指一件事该怎么做,面向对象编程(如Java.python)指一件事该让谁 ...
- 写给大忙人的Elasticsearch架构与概念(未完待续)
最新版本官方文档https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html文档增删改参考https://www ...
- Javascript之换肤(未完待续)
这个项目我还没有完全写出来,先记录至此.感觉是方法不对,背景图片的切换方法有Problem.如若有一大神发现了我的文章,还望指导,吾将感激不尽.日后代码还会再钻研再改改. <head> & ...
随机推荐
- 格点多边形面积公式(Pick定理)的一个形象解释(转)
Pick定理:如果一个简单多边形(以下称为“多边形”)的每个顶点都是直角坐标平面上的格点,则称该多边形为格点多边形.若一个面积为S的格点多边形,其边界上有a个格点,内部有b个格点,则S=a/2+b-1 ...
- JavaWeb -- JSP+JavaBean模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. JSP+JavaBean模式适合开发业务 ...
- read_excel
read_excel默认把第一行作为各个列名, 用headers=None,读取表时,可以让第一行不为列名. 而不是names,col之类的参数
- Delphi_检查exe文件是否是"随机基址"
ZC: cnpack 还是蛮好用的 1.代码: procedure TForm1.btnRandomizedBaseAddressClick(Sender: TObject); var pDosHdr ...
- Db2数据库在Linux下的安装和配置
一.DB2数据库的安装和配置: 1.安装完成后,需要增加三个操作系统的组和三个操作系统用户,如下: groupadd -g 999 db2iadm1 #(管理实例的组) groupadd -g 99 ...
- PHP的目录路径问题
在windows下,可以用“/”或者“\”来表示目录层次,而linux下只能用“/”:同时在linux下没有盘符的概念,只有用“/”符号表示唯一的根目录.所以,用一个变量表示目录位置的话,用“/”最安 ...
- git将代码上传到coding分支
分支 我理解的分支 分支,简单地讲就是一个项目的不同分支存放不同的代码,这样的话一个项目就有了几分代码,但是最终的代码一般放在主分支里面,即master分支里,分支在实际中可以方便的隔离开发. 假设你 ...
- 51nod 1102 单调栈
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 1102 面积最大的矩形 基准时间限制:1 秒 空间限制:1310 ...
- EDID真实数据块,请参考标准文档仔细核对
数据格式的详细说明:http://en.wikipedia.org/wiki/Extended_display_identification_data 下面是一个例子:
- 网页播放rtsp流媒体
解决方法: 1.搭建Red5流媒体服务器(其他还有CRTMPD.NGINX-RTMP.SRS) 2.FFmpeg(其他还有live555)实现监控摄像头的RTSP协议转RTMP协议直播 3.搭建WEB ...