zoukankan      html  css  js  c++  java
  • Constructor和Object

    Constructor

    对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数。

    在JavaScript中,每个具有原型的对象都会自动获得constructor属性。除了arguments、Enumerator、Error、Global、Math、RegExp、Regular Expression等一些特殊对象之外,其他所有的JavaScript内置对象都具备constructor属性。例如:Array、Boolean、Date、Function、Number、Object、String等。

    语法

    Object.constructor

     返回值

    对象的constructor属性返回创建该对象的函数的引用。

    示例&说明

    对象创建
    创新新对象,在javascript中通常有两种方法:
     1.对象直面量方法
    var newObj = {};

     2.构造器的简洁方法
    var newObj = new Object();
    在Object构造器为特定的值创建对象封装,或者没有传递值时,它将创建一个肯那个对象并返回

     对象赋值的方法:
     1.“点”方法

    1
    2
    3
    4
    //设置属性
    newObj.name = 'LanFeng';
    //获取值
    var user= newObj.name;

     1.中括号方法

    1
    2
    3
    4
    //设置属性
    newObj["name"]= 'LanFeng';
    //获取值
    var user= newObj["name"];

     1.Object.defineProperty (适用ECMAScript5)

    1
    2
    3
    4
    5
    6
    7
    //设置属性
    Object.defineProperty(newObj,"name",{
      value:"LanFeng",
      writable:true,
      enumerable:true,
      configurable:true
    })

     1.Object.defineProperties

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //设置属性
     Object.defineProperties(newObj,{
       "someKey":{
        value:"Hello Js",
         writable:true
      },
      "anotherKey":{
        value:"Foo bar",
        writable:false
      }
    })

    Javascript不支持类的概念,但它确实支持与对象一起用的特殊constructor函数,通过在构造器前面加new关键字,告诉js像使用构造器一样实例化一个新对象,并且对象成员由该函数定义。
    在构造器内,关键字this引用新创建的对象。回顾对象创建,基本的构造器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function Car(model,year,miles){
      this.model = model;
      this.year = year;
      this.miles = miles;
      this.toString = function(){
      return this.model + "has done" + this.miles +"miles";
      }
    }
    //创建实例化对象
     
    var civio = new Car("Honda Civio",2009,20000);
     
    var mondeo= new Car("Ford Mondeo",2009,5000);

    上面例子是一个简单的构造器模式版本,但它确实存在一些问题,其中一个问题是,它使用继承变得困难,另外一个问题是,toString()这样的函数是为每个使用Car构造器创建的新对象而分别重新定义的,这个不是最理想的,因为这种函数应该在所有的Car类型实例直接共享。

    javascript中有有一个prototype的属性,调用js构造器创建一个对象后,新对象就会具有构造器原型的所有属性,通过这种方式,可以创建多个对象,并访问相同的原型,实现方法共享。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function Car(model,year,miles){
      this.model = model;
      this.year = year;
      this.miles = miles;
     
    }
     
     
    //原型函数
    Car.prototype.toString = function(){
      return this.model + "has done" + this.miles +"miles";
      }
     
    //创建实例化对象
     
    var civio = new Car("Honda Civio",2009,20000);
    var mondeo= new Car("Ford Mondeo",2009,5000);
    console.log(civio.toString())
    console.log(mondeo.toString())

    Object

    一、Object类介绍
    Object类是所有JavaScript类的基类(父类),提供了一种创建自定义对象的简单方式,不再需要程序员定义构造函数。可以在程序运行时为Javascript对象随意添加属性,因此可以很容易地创建自定义对象。

    二、Object类主要属性
    1.constructor:对象的构造函数。
    2.prototype:获得类的prototype对象,static性质, 对象的引用。

    三、Object类主要方法
    1.hasOwnProperty(propertyName)
    判断对象是否有某个特定的属性。必须用字符串指定该属性,例如,obj.hasOwnProperty("name"),返回布尔值。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

    2.isPrototypeOf(object)
    判断该对象是否为另一个对象的原型。
    obj1.isPrototypeOf(obj2);
    obj1是一个对象的实例;obj2是另一个将要检查其原型链的对象。原型链可以用来在同一个对象类型的不同实例之间共享功能。如果obj2的原型链中包含 obj1,那么isPrototypeOf 方法返回true。如果obj2不是一个对象或者obj1没有出现在obj2中的原型链中,isPrototypeOf 方法将返回 false。

    3.propertyIsEnumerable(propertyName)
    通过这个方法我们可以检测出这个对象成员是否是可遍历的,如果是可遍历出来的,证明这个对象就是可以利用for in 循环进行遍历的,格式如下:obj.propertyIsEnumerable(propertyName)
    如果 propertyName存在于 obj中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。
    典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。

    4.toString()

    返回对象对应的字符串


    5.valueOf()

    返回对象对应的原始值


    以上5个方法都是Object.prototype上定义的,ECMAScript中的所有对象都由Object继承而来,所以在ECMAScript上的所有对象都具有以几个方法

  • 相关阅读:
    border-radius
    border-style
    border-width
    border
    max-width
    min-width
    clip 语法
    left
    z-index
    position
  • 原文地址:https://www.cnblogs.com/xbsai/p/9944084.html
Copyright © 2011-2022 走看看