NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
## 什么是原型 原型与原型链是学习JavaScript这门语言不能不理解的两个重要概念,为什么?因为JavaScript是一门基于原型的语言。 怎么理解“JavaScript是一门基于原型的语言”?在软件设计模式中,有一种模式叫做原型模式,JavaScript正是利用这种模式而被创建出来。先来了解下原型模式的概念:原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。原型模式的目的是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。也就是说利用已有的一个原型对象,可以快速地生成和原型对象一样的新对象实例。 原型: 原型到底是什么?原型是一个可以被复制(或者叫克隆)的一个类,通过复制原型可以创建一个一模一样的新对象。通俗的说,原型就是一个模板,在设计语言中更准确的说是一个对象模板。 ## 对象原型 当调用对象的属性或者方法的时候,先去找对象本身的属性/方法,如果对象没有该属性或方法,此时去调用原型中的属性/方法.如果对象本身没有该属性/方法,原型中也没有该属性/方法,那么会报错. 对象的__proto__等于 构造函数的 Person.prototype __proto__属性是非标准的,生产环境不要使用. ``` function Person(name, age) { this.name = name; this.age = age; } Person.prototype.show = function () { console.log(this.name); } var p1 = new Person('jack', 20); console.log(p1.__proto__ === Person.prototype); //true __proto__就是对构造函数的prototype的引用 ``` 在原型对象中有一个属性constructor,这个属性就是构造函数.constructor的作用就是记录了创建该对象的构造函数.我们想知道这个对象是什么类型,是什么构造函数创建的,通过它就可以知道对象的构造函数. ``` ƒ Person(name, age) { this.name = name; this.age = age; } ```