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