ES5_对象 与 继承
1. 对象的定义
//定义对象
function User(){ //在构造方法中定义属性
this.name = '张三';
this.age = 12; //在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
} //原型链中定义属性
User.prototype.sex = '男'; //原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
} // 静态方法的声明
User.getInfo = function () {
alert('我是静态方法')
} //对象的使用: 实例化对象
var user = new User('张三', 3); //属性的调用
alert('姓名:'+ user.name + '; 性别:' + user.sex); // 弹出: 姓名:张三; 性别:男 //给对象属性重新赋值
user.name = '李四';
user.sex = '女'; //方法的调用
user.run(); // 弹出:李四在跑步
user.work(); // 弹出:李四在工作 //静态方法的调用
User.getInfo(); // 弹出: 我是静态方法
注意: 原型链中声明属性将会多个实例共享,而构造函数不会
对象的继承
1. 对象的继承 之 对象冒充继承
function User(){
this.name = '张三';
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
}
//原型链中定义属性
User.prototype.sex = '男';
//原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
}
//对象中的继承一: 对象冒充继承
function Student(){
//Student 继承 User对象,此方法叫: 对象冒充继承
User.call(this);
}
var student = new Student();
student.run(); // 弹出:张三在跑步
student.work(); //报错,原因是: 对象冒充继承的方法只继承对象的构造函数的属性和方法
注意: 对象冒充继承的方法 只能 继承对象的构造函数的属性和方法,不能 继承原型链中的函数和方法
2. 对象的继承 之 原型链继承
function User(){
this.name = '张三';
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
}
//原型链中定义属性
User.prototype.sex = '男';
//原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
}
//对象中的继承一: 原型链继承实现继承
function Student(){
}
Student.prototype = new User();
var student = new Student();
student.run(); // 弹出:张三在跑步
student.work(); // 弹出:张三在工作
注意:原型链继承的方法 可以 继承对象的构造函数的属性和方法,也可以 继承原型链中的函数和方法
function User(name){
this.name = name;
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
}
//原型链中定义属性
User.prototype.sex = '男';
//原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
}
//带参数对象的实例化方法:
var user1 = new User('张三');
user1.run(); // 弹出: 张三在跑步
user1.work(); // 弹出:张三在工作
//对象中的继承一: 原型链继承实现继承
function Student(name){
}
Student.prototype = new User();
var student = new Student('李四');
student.run(); // 弹出: undefined在跑步
student.work(); // 弹出:undefined在工作
注意:原型链继承有个缺点就是 在实例化子类时,无法 给父类传参,如上代码,子类调用父类的方法时, 弹出传参属性为 undefined
为了解决此缺点,则可以使用 冒充对象继承 + 原型链继承的组合模式
3. 冒充对象继承 + 原型链继承的组合模式
function User(name){
this.name = name;
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
}
//原型链中定义属性
User.prototype.sex = '男';
//原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
}
//对象中的继承一: 原型链继承实现继承
function Student(name){
//冒充对象继承时,可以给父类传参
User.call(this, name);
}
//原型链继承父类
//Student.prototype = new User();
//因冒充对象继承时,已经继承了父类的构造函数中的属性和方法,因此在原型链继承中也可只继承父类的原型链的属性和方法,即
Student.prototype = User.prototype;
var student = new Student('李四');
student.run(); // 弹出: 李四在跑步
student.work(); // 弹出:李四在工作
ES5_对象 与 继承的更多相关文章
- js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。
js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } Class ...
- 对象的继承关系在数据库中的实现方式和PowerDesigner设计
原文:对象的继承关系在数据库中的实现方式和PowerDesigner设计 在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的 ...
- 类和对象:继承 - 零基础入门学习Python038
类和对象:继承 让编程改变世界 Change the world by program 上节课的课后作业不知道大家完成的怎样?我们试图模拟一个场景,里边有一只乌龟和十条鱼,乌龟通过吃鱼来补充体力,当乌 ...
- #JavaScript对象与继承
JavaScript对象与继承 JavaScript是我在C语言之后接触的第二门编程语言,大一暑假的时候在图书馆找了一本中国人写的JavaScript程序设计来看.那个时候在编程方面几乎还是小白,再加 ...
- Javascript学习6 - 类、对象、继承
原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...
- (79)Wangdao.com第十五天_JavaScript 对象的继承_prototype原型对象_封装_函数式编程
javascript 内置了许多 function 函数(){...} js 执行首先就会执行自己内置的函数定义 (function Function.function Object) 对象的继承 大 ...
- Javascript实现对象的继承
在Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼.压个啥样,就得是个啥样,不能随便动,动一动就坏了.而在Javascript中,没有模子,月饼被换成了面 ...
- 关于js的对象原型继承(一)
javascript中,对象的继承是通过原型去继承. 可以这样理解:js中的对象,包含的除了属性和方法,还有一个最基本的原型__proto__对象.这个原型__proto__指向谁,这个对象就继承谁. ...
- js一种继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。
js一种继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } ClassA ...
随机推荐
- bat脚本的基本命令语法
bat脚本的基本命令语法 一.批处理的常见命令 1.REM 和 :: 2.ECHO 和 @ 3.PAUSE 4.ERRORLEVEL 5.TITLE 6.COL ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(六)- webpack-dev-server 自适应支持手机端访问
关于EasyDSS EasyDSS商用流媒体服务器解决方案是一套集流媒体点播.转码与管理.直播.录像.检索.时移回看于一体的一套完整的商用流媒体服务器解决方案,EasyDSS高性能RTMP流媒体服务器 ...
- [LeetCode] 388. Longest Absolute File Path 最长的绝对文件路径
Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...
- 玩转CONSUL(3)–大规模部署的性能开销定量分析
1. 引言 今天有朋友问萌叔,consul能否在大规模生产环境下进行应用.场景是总计大约10w+台机器,分为3 ~ 4个机房,单个机房最多3w万+机器.这个问题大的,可把萌叔吓了跳,部门里面consu ...
- 【神经网络与深度学习】【计算机视觉】SSD
SSD 转自:https://zhuanlan.zhihu.com/p/24954433?refer=xiaoleimlnote 参考: SSD: Single Shot MultiBox Detec ...
- Saltack 针对用户进行权限控制
一. client_acl 配置使用 1.1 client_acl概述 开启对系统上非root的系统用户在master上执行特殊的模块,这些模块名可以使用正则表达式进行表示,不能指定对那些minion ...
- 在ensp上VLAN基础配置以及Access接口
什么是VLAN? 早期的局域网技术是基于总线型的结构,也就是说所有主机共享一条传输线路.这就带来了很多问题:冲突域和安全问题.为了避免冲突域,我们使用二层交换机.但想想,一台计算机在总线上传输数据的时 ...
- 2019 西安邀请赛 M
Problem Description There are n planets ∼n. Each planet is connected to other planets through some t ...
- 通过LxRunOffline迁移Win10的Linux子系统
默认情况WSL装在系统盘(C:),重装系统怎么办?C盘空间不足怎么办?能修改WSL安装路径吗? 当然可以,使用LxRunOffline不仅能修改WSL安装路径,还能备份WSL.还原WSL…… 修改WS ...
- Django中的admin
1.基本知识 在用Django框架写了一个网站之后,我们添加数据大概有两种方式: 1.在连接的数据库中添加数据 2.登录admin,进入后台添加数据 创建一个Django项目后,我们在url.py中会 ...