1. 程式人生 > >Constructor和Object

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上的所有物件都具有以幾個方法