JavaScript继承
继承有什么作用?
继承可以让子类拥有父类的方法和属性,然后在这个基础上进行方法和属性调用,可以提高代码的复用性和效率。
1. 下面两种写法有什么区别?
//方法1 function People(name, sex) { this.name = name; this.sex = sex; this.printName = function () { console.log(this.name); } } var p1 = new People('java', '男'); //方法2 function Person(name,sex) { this.name = name; this.sex = sex; } Person.prototype.printName = function () { console.log(this.name); } var p2 = new Person('javascript','女');
-
写法1 把printName方法放在了构造函数里,每次new一个对象的时候,都会实例化当前对象的printName方法。如果当前new10个People对象,都会重复实例化当前printName方法10次,这样重复非常浪费空间。
-
写法2 在每次new一个对象的时候,都不会重复实例化printName方法,因为printName方法在原型链上,如果当前new10个People对象,原型链上printName不会重复实例化,所有的对象都会共用原型链上的方法,这样就会节约空间。
2. 如下代码中call的作用是什么?
function Person(name, sex) { this.name = name; this.sex = sex; } function Male(name,sex,age) { Person.call(this, name, sex); //这里的call是什么作用? this.age = age; } var mal = new Male('java', '女', 2); mal.hasOwnProperty('printName'); //false
call 调用Person函数 第一个参数this指向Male,使Male函数实现构造函数继承,获取Person下的属性
hasOwnProperty()方法会返回一个布尔值,指示对象是否具有指定的属性作为自身(不继承)属性。
3.实现一个完整的继承
function Person(name, sex) { this.name = name; this.sex = sex; } Person.prototype.printName = function () { console.log(this.name); } function Male(name, sex, age) { Person.call(this, name, sex); //这里的call是什么作用? this.age = age; } Male.prototype = new Person(); Male.prototype.getAge = function () { console.log(this.age); } var mal = new Male('javascript', '女', 2); mal.printName(); mal.getAge();
分类:
JavaScript
标签:
javascript
, js
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp