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继承方法,如果你没看过,那么建议你先看一下,因为接下来要写的内容, 是建立在此基础上的.另外本文作为我个人的读书笔记,才疏 ...
随机推荐
- webpack 基本使用
1. 创建webpack-test文件夹 2. npm初始化 3. 安装webpack 4. 使用webpack打包 hello.js 是需要打包的文件 hello.bundle.js 是打包完以后 ...
- MVC框架请求处理
为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平.你的一个决定会影响团队未来的几年.要考虑方面太多: 简单易用,以提高开发效率.使小部分的精力在框架上,大部分的 ...
- canvas基础之变换
2D绘制上下文支持各种基本的绘制变换: rotate(angle):围绕原点旋转图像angle弧度.(举例:如需旋转 5 度,可规定下面的公式:5*Math.PI/180.) scale(scaleX ...
- poj3190 Stall Reservations (贪心+优先队列)
Cleaning Shifts Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) To ...
- [转]嵌入字体到程序 Winform C#
http://www.cnblogs.com/top5/archive/2011/06/20/2084942.html 程序安装字体或直接调用非注册字体[c#] .安装字体 //程序直接将字体文件安装 ...
- vSphere client 登陆ESXI主机“您无权登录次服务器”
vCenter安装在虚拟机上,安装好后想调整下内存,直接把虚拟机关闭了电源,突然一想服务器都被我关了,还拿什么修改内存,完蛋! 突然想起,在使用vCenter之前,都是用vsphere client ...
- Northwestern European Regional Contest 2017-I题- Installing Apps题解
一.题意 有一个手机,容量为$C$,网上有$N$个app,每个app有个安装包大小$d_i$,有个安装后的占用空间大小$s_i$,安装app是瞬间完成的,即app的占用空间可以瞬间由$d_i$变成$s ...
- Java面向对象技术
问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.2面向对象技术 1.面向对象与面向过程有什么区别? 看下面一个实例即可: 面向过程就是分析出解决问题所需要的步骤 ...
- Python面向对象之内置方法
1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, s ...
- python3中的mysql数据库操作
软硬件环境 OS X EI Capitan Python 3.5.1 mysql 5.6 前言 在开发中经常涉及到数据库的使用,而python对于数据库也有多种解决方法.本文以python3中的mys ...