对象 原型 原型方法
对象
原型
原型方法
知识点:
原型方法
1、hasOwnProperty
obj.hasOwnProperty(prop)
hasOwnProperty() 方法会返回一个布尔值,指示对象是否具有指定的属性作为自身(不继承)属性。
2、isPrototypeOf
prototypeObj.isPrototypeOf(object)
isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。
function Fee() {
}
function Fi() {
}
Fi.prototype=new Fee();
function Fo() {
}
Fo.prototype=new Fi();
function Fun() {
}
Fun.prototype=new Fo();
var fun=new Fun();
if(Fi.prototype.isPrototypeOf(fun)){
console.log("确实挂载在这个原型链下")
}
console.log(fun)
3、
propertyIsEnumerable
obj.propertyIsEnumerable(prop)
propertyIsEnumerable() 方法返回一个布尔值,表明指定的属性名是否是当前对象可枚举的自身属性。
枚举就是用for in可以罗列出来的属性
var o={};
var a=[];
o.prop="属性";
a[0]=3;
console.log(o.propertyIsEnumerable("prop"));
console.log(a.propertyIsEnumerable(0))
4、constructor
属性,返回一个指向创建了该对象原型的函数引用。需要注意的是,该属性的值是那个函数本身,而不是一个包含函数名称的字符串。对于原始值(如1,true 或 "test"),该属性为只读。
var o={};
console.log(o.constructor===Object);
var a=[];
console.log(a.constructor===Array);
var n=4;
console.log(n.constructor===Number);
function Tree(name) {
this.name=name;
}
var theTree=new Tree("big");
console.log(theTree.constructor)
function fn1() {};
var f1 = new fn1();
console.log(f1.constructor === fn1); //true
//替换默认原型
function fn2() {};
fn2.prototype = {};
var f = new fn2();
console.log(f.constructor === fn2); //false
console.log(f.constructor === Object); //true
字面量方式为什么constructor会指向Object?因为Box.prototype={};这种写法其实就是创建了一个新对象。而每创建一个函数,就会同时创建它prototype,这个对象也会自动获取constructor属性。所以,新对象的constructor重写了Box原来的constructor,因此会指向新对象,那个新对象没有指定构造函数,那么就默认为Object.原型的声明是有先后顺序的,所以,重写的原型会覆盖之前的原型。
举例:
浙公网安备 33010602011771号