JS中的继承实现方式
第一种:通过prototype来实现
prototype.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function Person(){} Person.prototype.username = "lisi";
Person.prototype.gender = "man";
Person.prototype.fav = ["read","eat"]; var p1 = new Person();
var p2 = new Person();
p2.username = "zhangsan";
//p2.fav.push("run");
var fav = p2.fav;
console.log(fav)
p2.fav = new Array();
p2.fav = p2.fav.concat(fav); p2.fav.push("run"); /*console.log(p1.username);
console.log(p1.fav);
console.log(p2.username);
console.log(p2.fav);*/ function User(){}
User.prototype = new Person();
User.prototype.password = "123123";
User.prototype.email = "admin@admin.com"; User.prototype.say = function(){
console.log(this);
}; var u = new User();
u.gretting="Hello";
var u1 = new User(); console.log(u.username)
u.say();
u1.say(); </script>
</head>
<body> </body>
</html> 第二种方法:通过this关键字来实现;js中的this始终指向调用它的对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function Person(name,gender){
this.name = name;
this.gender = gender;
} function User(name,gender,email,password){
this.super = Person;
this.super(name,gender);
delete this.super;
this.email = email;
this.password = password;
//this.Person(name,gender);
} var p1 = new Person("lisi","man"); var u = new User("zhangsan","msn","zhnagsan@zhangsan.com","123123123");
console.log(p1.name);
console.log(u.name);
//var p2 = new Person();
//p2.name = "lisi";
//p2.gender = "man";
</script>
</head>
<body> </body>
</html> 第三种方法:通过call或者apply来实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function Person(name,gender){
this.name = name;
this.gender = gender;
} function User(name,gender,email){ //对象冒充 动态改变 函数的执行上下文
//Person.call(this,name,gender);
Person.apply(this,[name,gender]); this.email = email; this.say = function(msg){
console.log(this);
console.log(msg);
}
} var u = new User("lisi","man","lisi@lisi.com");
console.log(u.gender);
u.say("Hello"); u.say.call(new Person("",""),"Hello1");
u.say.apply(window,["lisi"]); console.log("--------------------")
var name = "lisi";
var obj = {
name:"zhangsan",
say:function(){
console.log(this.name);
return function(){
console.log(this.name);
return function(){
console.log(this.name);
return {
name:"wangwu",
say:function(){
console.log(this.name);
} }
}
}
}
}; obj.say().call(obj)().say.apply(this); //obj.say()();
</script>
</head>
<body> </body>
</html>
JS中的继承实现方式的更多相关文章
- JS中写继承的方式
有父子两个函数,代表两个类: var parent = function(){} var child = function(){} 一.直接继承 child.prototype = new paren ...
- js中实现继承的几种方式
首先我们了解,js中的继承是主要是由原型链实现的.那么什么是原型链呢? 由于每个实例中都有一个指向原型对象的指针,如果一个对象的原型对象,是另一个构造函数的实例,这个对象的原型对象就会指向另一个对象的 ...
- Javascript中实现继承的方式
js中实现继承和传统的面向对象语言中有所不同:传统的面向对象语言的继承由类来实现,而在js中,是通过构造原型来实现的,原型与如下几个术语有关: ①构造函数:在构造函数内部拥有一个prototype属性 ...
- 【学习笔记】六:面向对象的程序设计——理解JS中的对象属性、创建对象、JS中的继承
ES中没有类的概念,这也使其对象和其他语言中的对象有所不同,ES中定义对象为:“无序属性的集合,其属性包含基本值.对象或者函数”.现在常用的创建单个对象的方法为对象字面量形式.在常见多个对象时,使用工 ...
- JS中的继承(上)
JS中的继承(上) 学过java或者c#之类语言的同学,应该会对js的继承感到很困惑--不要问我怎么知道的,js的继承主要是基于原型(prototype)的,对js的原型感兴趣的同学,可以了解一下我之 ...
- js中的继承和重载
js中有三种继承方式:一.通过原型(prototype)实现继承 二.借用构造函数式继承,可分为通过call()方法实现继承和通过apply()方法实现继承 仅仅通过原型继承我们可以发现在实例化子 ...
- html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结
Day27 html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...
- 基础篇:1.JavaScript运行在html中,引用有几种方式?—— 6.js中常用的输出方式?
书接上文,上文提到若干条JavaScript的基础性知识,大部分都是一些概念性的东西,本着认真严谨的态度,我们要认真对待,有些条目的问题是某个知识点的周边延伸,为节约篇幅,就一起整理了,如有描述不对的 ...
- JS中的继承(下)
JS中的继承(下) 在上一篇 JS中的继承(上) 我们介绍了3种比较常用的js继承方法,如果你没看过,那么建议你先看一下,因为接下来要写的内容, 是建立在此基础上的.另外本文作为我个人的读书笔记,才疏 ...
随机推荐
- JMeter--使用URL回写来处理用户会话
如果测试的Web应用系统使用URL回写而非Cookie来保存会话信息,那么测试人员需要做一些额外的工作来测试web站点 为了正确回应URL回写,JMeter需要解析从服务器收到的HTML,并得到唯一的 ...
- ComboBox智能搜索功能
cmbList.AutoCompleteSource = AutoCompleteSource.ListItems; cmbList.AutoCompleteMode = AutoCompleteMo ...
- gcc gdb调试 & 命令行带参 (一) ******
用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软 ...
- linux查看各服务状态以及开启和关闭
1.......................................... 友好的显示所有服务的运行状态: service --status-all chkconfig --list 2. ...
- 小甲鱼-005python数据类型
整型:python3整形理论上没有长度限制,很容易进行大数的运算. 浮点型:没有小数点就是整形,有小数点就是浮点型 e记法:科学技术法1.5e3,即1500,1.3e-4即0.0001.3,e记法是浮 ...
- 文字和img、input并排无法对齐的问题
文字和img.input并排在一行的时候,img和input位置总是会偏移一点,input就用复选框和按钮举例,如下图: 只要在img和input样式加上vertical-align:middle;就 ...
- 学习MongoDB 二:MongoDB添加、删除、修改
一.简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种.数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在MongoDB ...
- 异常处理的设计与重构 pdf
百度网盘: https://pan.baidu.com/s/1hsQIEGk
- HTML|CSS之HTML常用标签
知识内容: 1.标签 2.head内标签 3.body内常用标签 注:本人使用的HTML为HTML5 一.标签 1.标签格式 标签的语法: <标签名 属性1=“属性值1” 属性2=“属性值2”… ...
- IIS6.0 IIS7.5应用程序池自动停止的解决方法 搜集整理
来源:http://www.guchengnet.com/1499.html IIS6.0 IIS7.5应用程序池自动停止的解决方法 搜集整理 发表于2016年12月14日 有2.3个月没有用本地的i ...