多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # JS的继承是基于原型的继承 * 面向对象编程很重要的一个方面,就是对象的继承。A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。这对于代码的复用是非常有用的。 * 大部分面向对象的编程语言,都是通过“类”(class)来实现对象的继承。JavaScript 语言的继承则是通过“原型对象”(prototype)。 ## 1.构造函数的缺点 JavaScript 通过构造函数生成新对象,因此构造函数可以视为对象的模板。实例对象的属性和方法,可以定义在构造函数内部。 ``` var Person = function(name,age){ this.name = name; this.age = age; } var chengchao = new Person("jack",18) console.log(chengchao.name); //"jack" console.log(chengchao.age); //18 ``` > 通过构造函数为实例对象定义属性,虽然很方便,但是有一个缺点。同一个构造函数的多个实例之间,无法共享属性,从而造成对系统资源的浪费。 ``` //eg: var Person = function(name,age){ this.name = name; this.age = age; this.see = function(){ console.log(this.name+"爱看片") } } var chengchao = new Person("jack",18) chengchao.see(); ``` ## 2.这个问题的解决方法,就是 JavaScript 的原型对象(prototype) ``` var Person = function(name,age){ this.name = name; this.age = age; } Person.prototype.see = function(){ console.log(this.name+"爱看片") } var chengchao = new Person("jack",18); var lisi = new Person("李四",19); chengchao.see(); lisi.see(); ``` > 在原型上生成see方法,所有的对象共享改方法 > ![](https://box.kancloud.cn/383766e319e753f716b37dc7edce31c9_800x656.png) Eg:像数组字符,的一些常用的方法就是放在原型上 ``` Array.prototype.getMax = function(arr){ return Math.max(...arr); } var arr = [1,2,3]; arr.getMax(arr); //在数组的原型上定义一个say方法,所有实例化的对象都拥有了say方法 ``` JavaScript 继承机制的设计思想就是,原型对象的所有属性和方法,都能被实例对象共享 总结一下,原型对象的作用,就是定义所有实例对象共享的属性和方法 ``` var Person = function(name,age){ this.name = name; this.age = age; } Person.prototype.see = function(){ console.log(this.name+"爱看片") } Person.prototype.sex="男"; Person.prototype.like ="看美女"; var chengchao = new Person("jack",18); console.log(chengchao.like); ```