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開源框架中好象沒用到這些。