javascript中有原型這麼一個概念,任何一個構造函數都有它對應的原型(prototype),咱們能夠給這個原型賦予一些咱們想要的屬性,像下面這樣:javascript
function Gadget(name, color){ this.name = name; this.color = color; this.whatAreYou = function(){ return 'I am a ' + this.color + ' ' + this.name; } } Gadget.prototype.price = 100; Gadget.prototype.rating = 3; Gadget.prototype.getInfo = function(){ return 'Rating: ' + this.rating + ', price: ' + this.price; }; var newtoy = new Gadget('webcam', 'black');
這裏我定義了一個Gadget類的實例--newtoy對象。 在這個對象中,咱們能夠訪問對象內部及其原型對象中的屬性或者方法。 若是想要得到某個對象全部屬性的列表,咱們能夠使用for-in循環:java
for i in newtoy{ console.log(i + ' = ' + newtoy[i]); }
咱們能夠獲得下面的結果:web
name = webcam color = black whatAreYou = function (){ return 'I am a ' + this.color + ' ' + this.name; } price = 100 rating = 3 getInfo = function (){ return 'Rating: ' + this.rating + ', price: ' + this.price; }
這時候,若是咱們想要把原型中的屬性過濾掉,就能夠首先使用hasOwnProperty()來判斷該屬性是否是屬於對象內部的:函數
for(var i in newtoy){ if(newtoy.hasOwnProperty(i)) console.log(i + ' = ' + newtoy[i]); }
另外須要注意的幾點是:測試
每一個對象中都會有一個isPrototypeOf()方法,這個方法會告訴咱們當前對象是不是另一個對象的原型。this
var monkey = { hair: true, feeds: 'bananas' }; function Human(name){ this.name = name; } Human.prototype = monkey; var tom = new Human("Tom"); monkey.isPrototypeOf(tom);
//返回: true spa