什么是原型媳溺?
原型是一個對象盆顾,其他對象可以通過它實現(xiàn)屬性繼承诬像。
每個函數(shù)都有一個屬性叫做prototype屋群。
這個prototype的屬性值是一個對象(屬性的集合,再次強(qiáng)調(diào);的印)芍躏,默認(rèn)的只有一個叫做constructor的屬性,指向這個函數(shù)本身降狠。
原型方式
該方式利用了對象的 prototype 屬性对竣,可以把它看成創(chuàng)建新對象所依賴的原型。
這里榜配,首先用空構(gòu)造函數(shù)來設(shè)置類名否纬。然后所有的屬性和方法都被直接賦予 prototype 屬性。我們重寫了前面的例子蛋褥,代碼如下
function Car() {
}
Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.showColor = function() {
alert(this.color);
};
var oCar1 = new Car();
var oCar2 = new Car();
hasOwnProperty()
hasOwnProperty()函數(shù)用于指示一個對象自身(不包括原型鏈)是否具有指定名稱的屬性临燃。如果有,返回true,否則返回false膜廊。
語法:object.hasOwnProperty( propertyName )
hasOwnProperty()函數(shù)的返回值為Boolean類型乏沸。如果對象object具有名稱為propertyName的屬性,則返回true爪瓜,否則返回false蹬跃。
此方法不會檢查對象的原型鏈中是否存在該屬性,該屬性只有是對象本身的一個成員才會返回true铆铆。
JavaScript中的in操作符
定義:in操作符用來判斷某個屬性屬于某個對象蝶缀,可以是對象的直接屬性,也可以是通過prototype繼承的屬性薄货。
1.對于數(shù)組屬性需要指定數(shù)字形式的索引值來表示數(shù)組的屬性名稱(固有屬性除外翁都,如length)。
// Arrays? ? var trees = new Array("redwood", "bay", "cedar", "oak", "maple");? ? ? 0 in trees? ? ? ? // returns true
2.in的右邊必須是一個對象菲驴,如:你可以指定一個用String構(gòu)造器生成的荐吵,但是不能指定字符串直接量的形式:
var color1 = new String("green");? ? ? "length" in color1 // returns true
3.如果你使用delete操作符刪除了一個屬性,再次用in檢查時赊瞬,會返回false,如:
var mycar = {make: "Honda", model: "Accord", year: 1998};? ? delete mycar.make;? "make" in mycar;? // returns false
4.如果你把一個屬性值設(shè)為undefined贼涩,但是沒有使用delete操作符巧涧,使用in檢查,會返回true.
var mycar = {make: "Honda", model: "Accord", year: 1998}; mycar.make = undefined;"make" in mycar;? // returns true