1.定义
原型是 function 对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
Person.prototype = { //原型(描述一种继承关系),出生时就被定义好了
age : 18,
sex : "nan"
}
function Person(name) {
this.name = name
}
var p1 = new Person("xy");
console.log(p1);
构造函数的实例对象不能直接修改原型上的属性或方法
Person.prototype = {
age : 18,
sex : "nan"
}
function Person(name) {
this.name = name
}
var p1 = new Person("xy");
p1.age = 19; //试图修改成19
console.log(p1);
我们打印出来看一下:
结果发现p1上多了属性age,值是我们设置的19,而原型上还是18没有变
我们可以通过__proto__来修改原型上的属性或方法
Person.prototype = {
age : 18,
sex : "nan"
}
function Person(name) {
this.name = name
}
var p1 = new Person("xy");
p1.__proto__.age = 19;
console.log(p1);
我们打印出来看一下:
结果发现原型上的值已经变了。
2.判断实例对象和构造函数是否有关系
用isPrototypeOf或者instanceof
function Person() {
}
var p1 = new Person();
console.log(Person.prototype.isPrototypeOf(p1))//true
console.log(p1 instanceof Person)//true
3.删除属性
delete p1.name //只在实例中删除
delete p1.__proto__.name //只在原型中删除
4.查找属性
//只在实例中查找是否包含该属性
p1.hasOwnProperty('name')
//在实例或实例中查找是否包含该属性
'name' in p1;
//只在原型中查找是否包含该属性
'name' in p1.__proto__;
'name' in Person.prototype;