NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
## **原型:** 我定义了一个函数,里面的prototype就是原型对象,这是本来就有的,**定义了一些公用的属性和方法**。 **重点:** 1、每一个函数对象都有一个prototype属性,但是普通对象是没有的;   prototype下面又有个construetor,指向这个函数。 2、每个对象都有一个名为\_proto\_的内部属性,指向它所对应的构造函数的原型对象,原型链基于\_proto\_; **原型的主要作用就是实现继承与扩展对象。** ## **原型链:** 书上解释:**每个函数都有一个prototype属性,称为原型,而原型的值也是一个对象,因此它也有自己的原型,这样就串联起了一条原型链。原型链的链头是object,他的prototype比较特殊,值为null。** 每个函数都有一个prototype属性,它是一个引用变量,默认指向一个空object对象。当调用一个对象的函数或者属性的时候,如果在当前对象里面找不到,那么就到原型对象里面逐级寻找。 ***** 在javascript中,**所有的对象都拥有一个__proto__属性**指向该对象的原型(prototype)。Person是一个构造函数,它的本质就是一个函数。在javascript中函数是一等对象。 **原型链是原型对象创建过程的历史记录。** 每个对象都会在内部生成一个proto 属性,当我们访问一个对象属性时,如果这个对象不存在就会去proto 指向的对象里面找,一层一层找下去,当向上找 找到Object的原型的时候,这条原型链就算到头了。(proto最终指向obj) ***** ``` var Person = function(name){ this.name = name; } Person.prototype.sayHi = function(){ console.log("Hello! I am " + this.name + "."); } var joe = new Person("joe"); var john = new Person("john"); joe.sayHi(); //Hello! I am joe. john.sayHi(); //Hello! I am john. ``` > 从上面的代码可以看出来,**原型(Person)定义了一些公用的属性和方法;利用原型(Person)创建出来的新对象实例(joe和john对象)会共享原型(Person)的所有属性和方法。** [详解](https://www.cnblogs.com/wilber2013/p/4924309.html) [详解](https://www.cnblogs.com/jofun/p/8746511.html)