JS高级 - 面向对象5(继承,引用)
<script type="text/javascript">
//------------------Person类
//(Person)的构造函数
function Person(name, sex) {
this.name = name;
this.sex = sex;
}
Person.prototype.showName = function() {
console.log(this.name)
};
Person.prototype.showSex = function() {
console.log(this.sex)
};
//var obj = new Person("tangsan","男");
//obj.showName();
//------------------Worker类
//(Worker)的构造函数
function Worker(name, sex, job) {
console.log(this) //this->是new出来的Woker对象
//构造函数伪装:
//调用父级(Person)的构造函数 —— 1.为了继承属性
Person.call(this, name, sex);
this.job = job;
}
//原型链:
//2.原型来继承父级原型
Worker.prototype = Person.prototype;
Worker.prototype.showjob = function() {
console.log(this.job)
}
var Workerobj = new Worker("流川枫", "女", "篮球员");
Workerobj.showjob();
</script>
继承:
父类的构造函数。
子类继承属性。
//(Worker)的构造函数
function Worker(name, sex, job) {
console.log(this) //this->是new出来的Woker对象
//构造函数伪装:
//调用父级(Person)的构造函数 —— 1.为了继承属性
Person.call(this, name, sex);
this.job = job;
}
- 继承父类的方法。
//原型链:
//2.原型来继承父级原型
Worker.prototype = Person.prototype;
子类影响父类的问题:
console.log(Person.prototype.showjob);
//输出:
//function () {
// console.log(this.job)
// }
引用:
钥匙,同一块区域的地址
记住,js里面所有的对象全是引用。
var arr1 = [1,2,3];
var arr2 = arr1;//配钥匙
arr2.push(4);
console.log(arr2);//1234
console.log(arr1);//1234
如果我不希望是一个引用,我希望我修改arr2的时候,arr1不受影响,怎么做呢?ex:
var arr1 = [1,2,3];
var arr2 = [];
for(var i in arr1){//把arr1里的东西复制一份到arr2中。
arr2[i]=arr1[i];
}
arr2.push(4);
console.log(arr2);//1234
console.log(arr1);//123
继承父类的方法的代码修改为:
//原型链:
//2.原型来继承父级原型
//Worker.prototype = Person.prototype;
for (var i in Person.prototype) {
Worker.prototype[i] = Person.prototype[i];
}
instanceof
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
type of :....的类型
var arr1 = [1,2,3];
console.log(arr1 instanceof Array);//true
console.log(arr1 instanceof Object);//true 所有的类都是Object的一个子类,从object继承来的
JS高级 - 面向对象5(继承,引用)的更多相关文章
- 探讨 JS 的面向对象中继承的那些事
最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来 ...
- js高级-面向对象继承
一.工厂模式创建对象及优缺点 继承就是把公共的部分抽象出来作为父类,基类.吃饭,跑步等 var a = {}; //批量创建不方便,不能重复设置公共属性的代码 //工厂模式出现了,创建10个Cat对象 ...
- JS高级 - 面向对象1(this,Object ,工厂方式,new )
面向对象三要素: 封装 继承 多态 1.this 详解,事件处理中this的本质 window this -- 函数属于谁 <script type="text/javascript& ...
- JS高级---逆推继承看原型
逆推继承看原型 function F1(age) { this.age = age; } function F2(age) { this.age = age; } F2.prototype = new ...
- JS高级---面向对象的编程思想(贪吃蛇梳理)
面向对象的编程思想(贪吃蛇梳理) 模拟贪吃蛇游戏,做的项目 地图: 宽,高,背景颜色,因为小蛇和食物都是相对于地图显示的, 这里小蛇和食物都是地图的子元素, 随机位置显示, 脱离文档流的, 地图也需要 ...
- JS高级 - 面向对象4(json方式面向对象)
把方法包在一个Json里 var p1 = { name: "唐三", sex: "男", dreamdu: { URL: "www.dreamdu. ...
- JS高级 - 面向对象3(面向过程改写面向对象)
改写: 1.前提:所有东西都在 onload 里 2.改写:不能有函数嵌套,可以有全局变量 onload --> 构造函数 全局变量 --> 属性 函数 --> 方法 4.改错: t ...
- JS高级 - 面向对象2(prototype定义)
定义和用法 prototype 属性允许您向对象添加属性和方法 注意: Prototype 是全局属性,适用于所有的Javascript对象. 语法 object.prototype.name=val ...
- JS高级——面向对象方式解决tab栏切换问题
注意事项 1.给li元素注册事件,函数里面的this指的li元素,那么我们可以在注册事件之前将Tab对象用that=this进行保存 2.使用沙箱模式,所以暴露给外面的变量使用的是window.tab ...
随机推荐
- linux的防火墙
关闭防火墙: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开 ...
- java.lang.UnsupportedClassVersionError: xxx/xxxClass : Unsupported major.minor version 51.0【转】
以下小段参考自overflow: Unsupported major.minor version 52.0 [duplicate] 或csdn也有提及 : http://blog.csdn.net/p ...
- jackson的自动检测机制
jackson允许使用任意的构造方法或工厂方法来构造实例 使用@JsonAutoDetect(作用在类上)来开启/禁止自动检测 fieldVisibility:字段的可见级别 ANY:任何级别的字段都 ...
- Java编程思想 学习笔记9
九.接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 1.抽象类和抽象方法 抽象类是普通的类与接口之间的一种中庸之道.创建抽象类是希望通过这个通用接口操纵一系列类. Java提 ...
- Wannafly挑战赛21 E 未来城市规划
传送门 题目中给的信息很难直接维护,但是可以考虑一条边对答案的贡献 在以\(x\)为根的子树里,如果一条边\(i\)的权值为\(w_i\),这条边深度更深的端点为\(to_i\),那么这条边对这个子树 ...
- Javascript定义变量
在JavaScript中通过var来定义变量,不管是数字还是字符串,都可以通过这种方式来定义:我们既可以在声明变量的同时给变量赋值,也可以先声明变量,再给变量赋值. <script> va ...
- asp.net mvc 中[Authorize]在IE9以上版本关于FormsAuthentication.SetAuthCookie无效的问题 解决方案
简单的解决方法是,在网站根目录,新增一个浏览器定义文件(browser definition file) 叫“App_Browsers”文件夹,然后里面放一个“IE10.browser”文件即可,网站 ...
- 转:Delphi中使用比较少的一些语法
http://www.cnblogs.com/Murphieston/p/5577836.html 本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ...
- Adroid反编译资料收集
Android反编译神器jadx的使用 https://blog.csdn.net/Fisher_3/article/details/78654450 Android 反编译利器,jadx 的高级技巧 ...
- 编写灵活、稳定、高质量的 css代码的规范
语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 为选择器分组时,将单独的选择器单独放在一行. 为了代码的易读性,在每个声明块的左花括号前添加一个空格. 声 ...