在javascript中原型(prototype)定義了特定類型的所有實(shí)例都可以訪問的屬性和方法,很多些情況下需要重新對原型中的屬性賦值,如果方法錯(cuò)誤會(huì)導(dǎo)致一些意想不到的情況(僅僅是對像我這樣的新手奮斗),下面通過測試對這部分知識做一個(gè)簡單的總結(jié)。
基本類型定義如下:
復(fù)制代碼 代碼如下:
function Person(){}
Person.prototype={
constructor:Person,
name:"person",
age:100,
friends:["a","b"],
getName:function(){
return this.name;
}
};
復(fù)制代碼 代碼如下:
var p1=new Person();
var p2=new Person();
document.write(p1.name+"<br/>"); //person
document.write(p2.name+"<br/>"); //person
p1.name="p1";
document.write(p1.name+"<br/>"); //p1
document.write(p2.name+"<br/>"); //person
document.write(p1.hasOwnProperty("name")+"<br/>"); //true 屬于對象
document.write(p2.hasOwnProperty("name")+"<br/>"); //false 屬于原型
document.write(Object.keys(p1)+"<br/>"); //name
document.write(Object.keys(p2)+"<br/>"); // 空
document.write(Object.getOwnPropertyNames(Person.prototype)+"<br/>"); //constructor,name,age,friends,getName
document.write(Person.prototype.name+"<br/>"); //person
復(fù)制代碼 代碼如下:
var obj=new Object();
obj.name="obj";
function changeObj(o){
o.name="changed";
o=new Object();
o.name="newObj";
}
changeObj(obj);
document.write(obj.name); //changed
復(fù)制代碼 代碼如下:
p1.friends.push("c");
document.write(p1.friends+"<br/>"); //a,b,c
document.write(p2.friends+"<br/>"); //a,b,c
p1.friends=["x","y","z"];
document.write(p1.friends+"<br/>"); //x,y,z
document.write(p2.friends+"<br/>"); //a,b,c
document.write(p1.hasOwnProperty("friends")+"<br/>"); //true 屬于對象
document.write(p2.hasOwnProperty("friends")+"<br/>"); //false 屬于原型
document.write(Object.keys(p1)+"<br/>"); //name,friend
document.write(Object.keys(p2)+"<br/>"); //空
document.write(Object.getOwnPropertyNames(Person.prototype)+"<br/>"); //constructor,name,age,friends,getName
document.write(Person.prototype.friends+"<br/>"); //a,b,c
新聞熱點(diǎn)
疑難解答
圖片精選