• 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 += ' ';

    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开源框架中好象没用到这些。

  • 相关阅读:
    (22)进程和线程区别
    (21)回调函数
    (20)gevent协程
    (18)ProcessPoolExecutor进程池
    (19)ThreadPoolExecutor线程池
    (17)线程队列---queue LifoQueue PriorityQueue
    (16)线程---定时器Timer
    (15)线程---Condition条件
    (14)线程- Event事件和守护线程Daemon
    IDEA快速搭建WEB项目【记录篇】
  • 原文地址:https://www.cnblogs.com/SunBlog/p/4041174.html
Copyright © 2020-2023  润新知