每当我们创建一个函数时,解析器都会向函数添加一个新的属性prototype,这个属性对应着一个对象,这个对象叫做原型对象。
- 当函数以构造函数调用时,它所创建的对象都会产生一个隐含的属性,指向该构造函数的原型函数。对于该原型对象,可以使用__proto__来访问该属性;
- 同一个类的实例都可以访问该原型对象。我们可以将对象中共有的属性或方法,统一设置到原型对象中去;
- 当对象访问一个属性或方法时,先在对象自身中寻找,如果找不到,再去原型对象中去找。
在原型对象中添加属性:
类名.prototype.属性名 = 属性值;
在原型对象中添加方法:
类名.prototype.方法名 = function(){函数体};
当我们想要检查对象中是否含有该属性时,使用关键字in,但是这样无法检查出在原型对象中的属性,所以使用hasOwnProperty来检查。
方法:对象名.hasOwnProperty("属性名");
原型对象也有原型。当我们在对象中使用属性或方法时,现在对象中寻找,如果没有,去原型中寻找,如果原型中有,则使用,若没有,去原型的原型中找,若有,则使用,否则继续寻找,直到找到Object对象中停止。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>原型对象</title>
<script>
function Student(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
var stu = new Student("Anne", 18, "女");
Student.prototype.department = "science";
Student.prototype.show = function () {
document.write("Name: " + this.name + "<br>");
document.write("Age: " + this.age + "<br>");
document.write("Sex: " + this.sex + "<br>");
};
stu.show();
document.write("Department:" + stu.department + "<br>");
var result1 = stu.hasOwnProperty("name");
var result2 = stu.hasOwnProperty("department");
document.write("name是否属于对象stu:" + result1 + "<br>");
document.write("department是否属于对象stu:" + result2);
</script>
</head>
<body>
</body>
</html>