原型
# 原型
原型是构建出的对象的爹。
有构造函数通过 new 操作符创建实例,实例上存在属性 __proto__
(也就是原型) 指向原型对象 prototype
原型对象 prototype
中有属性 constructor
指向我们的构造函数。
Function.prototype.bind 创建出来的函数没有 prototype
function Person(){
}
var p = new Person();
# 原型的增删改查
以构造函数 Person 为例:
function Person(name){
this.name = name
}
var person = new Person();
查:
会先查找自身是否存在访问属性,如果不存在则会像原型中查找。
person.name // 访问的是自身的属性 name
// 假设我们在创建实例之前给 Person 的原型添加新的属性;
Person.prototype.age = 18;
// 此时我们可以通过
person.age 的方式来访问原型中的属性
增:
1、
Person.prototype.name = '张三';
2、
Person.prototype = {
name:'zhang san',
age:19
}
改:
实例创建之前和之后都起作用可以直接修改原型中的单一属性,但是如果在实例创建后使用对象字面量重新赋值是不生效的。
Person.prototype = {
height: 100
}
function Person() {
this.eat = function () {
this.height++
}
}
Person.prototype.height = 1
var p = new Person()
Person.prototype = {
height: 100,
} // 无效。