一、原型和原型链
//原型对象
//在Person这个类的全局对象中添加一个函数,然后在类中引用
//通过构造函数来创建对象
function Person(name,age){
//设置对象的属性
this.name = name ;
this.age = age ;
}
//在Person类的原型对象中添加方法
Person_n.prototype.sayName = function(){
console.log("原型 " + this.name);
};
var person_n1 =new Person("P1",18);
person_n1.sayName();
//赋值
var A = {
a:1,
b:2
};
//A{a:1,b:2}
var B = Object.create(A);
var C = Object.create(B);
//A{a:1,b:2},B{A{a:1,b:2}},C{B{A{a:1,b:2}}}
B.c = 3;
C.d = 4;
//A{a:1,b:2},B{A{a:1,b:2},c=3},C{B{A{a:1,b:2},c=3},d=4}
console.log(C); //输出:{d:4}
for(var key in C){
console.log(C[key]);
};
//会在控制台中依次打印出4 3 1 2(C→B→A逐级查找)
结果:
二、hasOwnProperty方法判断对象是否包含特定的自身(非继承)属性
//2.12.6hasOwnProperty方法
//创造一个构造函数
function MyClass(){
}
//向MyClass的原型中方你添加一个name属性
MyClass.prototype.name="原型的名字";
//创建一个MyClass的实例
var mc = new MyClass();
mc.age=19;
//使用in检查对象中是否含有某个属性时,如果对象中没有但原型中有,也会返回true
console.log("age" in mc); //true
console.log("name" in mc); //true
//若只检查自身对象是否含有某个方法或属性 Object的hasOwnProperty()
console.log(mc.hasOwnProperty("age")); //true
console.log(mc.hasOwnProperty("name")); //false
//检查当前对象
console.log(mc.hasOwnProperty("hasOwnProperty")); //false
//检查当前对象的原型对象
console.log(mc.__proto__.hasOwnProperty("hasOwnProperty")); //false
//检查当前对象的原型对象的原型对象
console.log(mc.__proto__.__proto__.hasOwnProperty("hasOwnProperty")); //true
参考:
1.理解原型与原型链