继承

让一个对象拥有另一个对象的属性或者方法,并且自己添加的属性或者方法都不会影响到原来的对象

1、属性继承

通过call方法调用构造函数继承属性

2、方法继承

通过for in方法继承原型身上的方法

注意:

1、继承其它对象的属性的时候,一定要用call去修正一下this的指向

2、继承其它对象的方法的时候,不能直接赋值,要用for in的方法去赋值,不然会出现对象引用的关系

Corder要从Person身上继承属性,对象是复杂数据类型,不能直接复制

function Person(name,age){
this.name=name;
this.age=age;
} Person.prototype.say=function(){
console.log('my name:'+this.name);
} var p1=new Person('Jackson');
function Coder(name, age, job) {
this.name = name;
this.age = age;
//ERROR: 直接调用函数的话,this指向了window,就会有问题
Person(name,age);
this.job = job;
}

属性继承不可以这样直接调用,this指向不对,需要用call方法或者apply方法改变this指向

function Coder(name, age, job) {
this.name = name;
this.age = age; //call可以改变this指向,call的第一个参数就是要指向的对象
Person.call(this, name, age);
this.job = job;
}

方法继承

Coder.prototype.say=function(){
console.log('我叫'+this.name);
} /*用这种方法复制了一个对象的引用,如果改一个话,两个都会变,而且他们两个的构造函数都会指向同一个构造函数*/

需要用for in方法来继承

for(var attr in Person.prototype){
Coder.prototype[attr]=Person.prototype[attr]; }

如果需要继承构造函数自身的属性

for(var attr in Person.prototype){
if(Person.prototype.hasOwnProperty(attr)){
Coder.prototype[attr]=Person.prototype[attr];
}
}

JS难点--面向对象(继承)的更多相关文章

  1. js高级-面向对象继承

    一.工厂模式创建对象及优缺点 继承就是把公共的部分抽象出来作为父类,基类.吃饭,跑步等 var a = {}; //批量创建不方便,不能重复设置公共属性的代码 //工厂模式出现了,创建10个Cat对象 ...

  2. JS难点--面向对象(封装)

    我觉得js的难点之一就是面向对象编程. 面向对象 它是一种编程思想,它在写法上比面向过程相对来说复杂一些: 以下是我学习中关于面向对象的知识点总结:   1.什么是对象 从广义上说,"一切皆 ...

  3. js面向对象继承

    前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2 ...

  4. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

  5. 实用JS系列——面向对象中的类和继承

    背景: 在最开始学习JavaScript时,我们就知道,它是一种脚本语言,也有面向对象机制.但它的面向对象继承机制是基于原型的,即Prototype.今天,我们就来找一下JS中OO的影子. 创建类 1 ...

  6. 探讨 JS 的面向对象中继承的那些事

    最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来 ...

  7. 【学习笔记】六:面向对象的程序设计——理解JS中的对象属性、创建对象、JS中的继承

    ES中没有类的概念,这也使其对象和其他语言中的对象有所不同,ES中定义对象为:“无序属性的集合,其属性包含基本值.对象或者函数”.现在常用的创建单个对象的方法为对象字面量形式.在常见多个对象时,使用工 ...

  8. JS创建对象、继承原型、ES6中class继承

    面向对象编程:java中对象的两个基本概念:1.类:类是对象的模板,比如说Leader 这个是泛称领导,并不特指谁.2:实例:实例是根据类创建的对象,根据类Leader可以创建出很多实例:liyi,y ...

  9. JavaScript基础笔记(四) JS式面向对象

    JS式面向对象 一.理解对象 一)属性类型 ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征. ECMA-262 定义这些特性是为 ...

随机推荐

  1. 201521123087《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名)在自己建立的数据库上执行常见SQL语句(截图)-参考 ...

  2. JSTL常用标签

    JSTL标签常用:http://blog.csdn.net/imust_can/article/details/6965756

  3. pig hive hbase比较

    Pig 一种操作hadoop的轻量级脚本语言,最初又雅虎公司推出,不过现在正在走下坡路了.当初雅虎自己慢慢退出pig的维护之后将它开源贡献到开源社区由所有爱好者来维护.不过现在还是有些公司在用,不过我 ...

  4. 增大hadoop client内存

    export HADOOP_CLIENT_OPTS="-Xmx512m $HADOOP_CLIENT_OPTS" 问题场景:sqoop import时报OOM

  5. 【BZOJ】1015 [JSOI2008]星球大战starwar(并查集+离线处理)

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  6. PHP常用数组(Array)函数整理

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...

  7. Chinese Rings hdu 2842 矩阵快速幂

    Chinese Rings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. Race to 1 概率dp

    Race to 1 Time Limit: 10000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   ...

  9. localStorage和sessionStorage总结以及区别

    (1)兼容的手机和浏览器: (2)使用 .setItem( key, value)存键值数据 sessionStorage.setItem("key","value&qu ...

  10. zoj2277 The Gate to Freedom

                                                            传送门 题目大意,对n,                求n^n的最左边一位数的大小: ...