原型

# 原型

原型是构建出的对象的爹。

有构造函数通过 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,
        } // 无效。