開始之前我先明確個問題。如下代碼
<SCRIPT?LANGUAGE?=?"JavaScript">?
<!--?
Person.type?=?"?person?"?;

Person.writeType?=?function?()??
{
????document.writeln(?this?.type);
}?
?//?var?Person?=?function(){}//如果這樣定義會報錯,可以看看前面文章,函數(shù)的預(yù)編譯。?

??function??Person()??
{}?
Person.writeType();
alert(?typeof?(Person));

?for?(?var??key??in??Person)??
{
????alert(key);
}?
?var??person?=?new??Person();
//?-->?
</SCRIPT>在這里Person是個函數(shù),但我們還可以定義它的屬性(type)。而Person有Object實例的特性(for in、可以定義屬性),但Person不是Object的實例。
見如下代碼:
<SCRIPT?LANGUAGE?=?"JavaScript">?
<!--?

Object.prototype.toString?=?function?()??
{?return??'myToString'}?;

?function??Person()??
{

}?

?Person.prototype.toString?=?function?()??
{?return??'Person'}?;

?var??o?=?new??Person();
alert(o);
alert(Person)

Person.toString?=?function?()??
{?return??'Person?toString'}?;
alert(Person)
//?-->?
</SCRIPT>?
?
<SCRIPT?LANGUAGE?=?"JavaScript">?
<!--?

??var??Person?=?function??()??
{
?????this?.name?=?'Person的構(gòu)造函數(shù)中屬性name';

?????this?.getName?=?function?()??
{
??????????return???this?.name;
?}?
??//?this.toString=function(){}??//你把注釋去掉看看效果?
?}?
Person.name?=?"?Person?"?;

Person.toString?=?function?()??
{?return???this?.name?+?'的類方法'}?;?//?我可以用this啊?
?alert(Person.toString())?//?類方法?
?var??o?=?new??Person();
alert(o.getName());?//?構(gòu)造函數(shù)中的方法?
?alert(o);?//?訪問toString方法???先找??對象中?構(gòu)造函數(shù)中???Person的prototype中???????Object的prototype中?

??Object.prototype.toString?=?function?()??
{?return??'Object的prototype中的toString'}?;
alert(o);?//?Object的prototype中?

??Person.prototype.toString?=?function?()??
{?return??'Person的prototpe中的toString'}?;
alert(o);

o.toString?=?function?()??
{?return??'我覆蓋了toString方法了啊'}?
alert(o);
alert('我不能訪問前面的toString了。如果有super就好了!');
?//?其實還是可以訪問到被覆蓋的原型的。那樣太復(fù)雜了。?
//?-->?
</SCRIPT>?























見如下代碼:
























我理解function返回的數(shù)據(jù)類型是和Object同等級的數(shù)據(jù)類型。它有Object實例(new Object())的一些特性,但它不是Object的實例,因為它沒有繼承Object.prototype.toString=function(){return 'myToString'};但我們Person.toString=function(){return 'Person toString'};改變了覆蓋了方法。
在《javascript權(quán)威指南》中,作者用這個特性實現(xiàn)了“類方法、類變量”static方法,與java中不同,這些方法不能用new Person()來調(diào)用。
Object?????????????????? function???????????? 同等級 function可以定義屬性,可以(for in)
new Object()??????? new function()??? 同等級 new function()繼承了Object的prototype, ?????????????????????????????????????????????????????也會繼承 function的prototype
小例子。看了原型對象就很清楚了啊。 原型對象最好在代碼最前面定義,很容易被覆蓋啊!






































var Person = function(){}//這里我試了怎么不會出錯的?而且我也看不出語法有什么不妥??