什么是原型?
原型是一个对象,其他对象可以通过它实现属性继承。
每个函数都有一个属性叫做prototype。
这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫做constructor的属性,指向这个函数本身。
原型方式
该方式利用了对象的 prototype 属性,可以把它看成创建新对象所依赖的原型。
这里,首先用空构造函数来设置类名。然后所有的属性和方法都被直接赋予 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()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false。
语法:object.hasOwnProperty( propertyName )
hasOwnProperty()函数的返回值为Boolean类型。如果对象object具有名称为propertyName的属性,则返回true,否则返回false。
此方法不会检查对象的原型链中是否存在该属性,该属性只有是对象本身的一个成员才会返回true。
JavaScript中的in操作符
定义:in操作符用来判断某个属性属于某个对象,可以是对象的直接属性,也可以是通过prototype继承的属性。
1.对于数组属性需要指定数字形式的索引值来表示数组的属性名称(固有属性除外,如length)。
// Arrays var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); 0 in trees // returns true
2.in的右边必须是一个对象,如:你可以指定一个用String构造器生成的,但是不能指定字符串直接量的形式:
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.如果你把一个属性值设为undefined,但是没有使用delete操作符,使用in检查,会返回true.
var mycar = {make: "Honda", model: "Accord", year: 1998}; mycar.make = undefined;"make" in mycar; // returns true