Javascript是一种面向对象的弱语言,既然有面向对象,就有继承

继承:

1.call函数和apply函数:区别在于它们参数上的不同,固定参数的用call,可变参数的用apply。换句话说,就是apply接收的是arguments。

2.arguments是一个特别的数组参数,如果参数为arguments,你的参数只要是数组它就能接受,所以apply可以写成apply(function(){},arguments);

3.object.call.call(object2)和object.apply.apply(object2)

如果写成这样,那么输出会是object2定义的函数输出格式,而不是object的格式,但是原理不是类似于负负得正,call.call.call(object2)的结果还是object2的格式,因为多余两个的.call没有意义,不会参与执行,apply也一样。

原理:宿主.call中的对象被执行后,宿主中的this变成了该对象,所以再执行一次.call的时候,新宿主就是上次被执行的对象。

继承的方式:

1.通过原型链继承

所谓原型链就是利用 prototype 这一特殊的指针来进行方法的由子到父的逐级寻找调用,这种继承的思维虽然能完成继承,但是如果阁下学过java C++ C#等强面向对象语言,是不好理解的。

看代码:

//定义一个父函数
function father() {
this.LastName = 'Tommy';
this.FirstName='Mark';
}
father.prototype.SayFirstName = function () {
alert(this.FirstName);
};

然后我们弄一个儿子函数来继承它

function son() {
this.FirstName = 'Toney';
//this.FName='Toney';
}
son.prototype = new father();
son.prototype.SayFName = function () {
alert(this.FirstName);
//alert(this.FName);
};
son.prototype.SayFName();

我们的输出结果会是Mark,而不是Toney,即使我们把相应代码替换成注释内容仍旧不能正常显示,会输出undefined。除非我们在son.prototype上定义FName,即son.prototype.FName='Toney',才会正常显示Toney。
采用原型链继承法会导致‘父类’和‘子类’的构造模式不同,父类是混合构造模式,而子类是原型构造模式,所以不推荐这种继承。

javascript笔记 面向对象的更多相关文章

  1. javascript笔记—面向对象

    什么是对象: 对象是一个整体,对外提供一些操作. 什么是面向对象: 使用对象时,只关注对象提供的功能,不关注其内部细节,例如jquery 面向对象是一种通用思想,并非只有编程中能用,任何事情都可以用. ...

  2. JavaScript笔记——面向对象与原型

    JavaScript也是一门面向对象的语言.面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,JavaScript竟然没有class,因此它的面向对象也 ...

  3. 我的JavaScript笔记--面向对象

        单例模式 ??(基于对象,不能批量生产)  var person = {             name: "ywb",             sayHi: funct ...

  4. JavaScript高程第三版笔记-面向对象编程

    之前有篇博客曾提到过一点js的面向对象编程:js面向对象编程. 这里就结合js高程详细剖析一下javascript的面向对象编程. 前序: 1⃣️Object.defineProperty() var ...

  5. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  6. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  7. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  8. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  9. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

随机推荐

  1. 在WPF中显示GIF图片并实现循环播放

    WPF中有一个MediaElement媒体控件,可以来播放媒体,同时也可以显示GIF图片.但看到网上有些人说用MediaElement不能加载作为资源或内嵌的资源的GIF图片,我猜他们一定是在前台用X ...

  2. Swing基础

    Swing基础 JFrame JPanel 绘图:paint 监听事件: ActionListener  KeyListener Listener和Adapter 计时器:Timer     Time ...

  3. 263. Ugly Number

    Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...

  4. 菜鸟学习Spring——60s使用annotation实现简单AOP

    一.概述. AOP大家都知道切面编程,在Spring中annotation可以实现简单的AOP列子.下面还未大家介绍几个概念: Aspect 对横切性关注点的模块化. Advice 对横切性关注点的具 ...

  5. DB2批处理数据导入

    这里需要两个BAT文件 first.bat @echo off @set /p databaseName=1)请输入数据库名: @set /p userName=2)请输入用户名: @set /p u ...

  6. java reflect 初始学习 动态加载类

    首先要理解Class类: 在java 的反射中,Class.forName("com.lilin.Office") 使用类的全名,这样获取,不仅仅表示了类的类类型,同时还代表着类的 ...

  7. 非关系型数据库SequoiaDB虚拟机下应用再探

    上一次浅谈了SequoiaDB在虚拟机上的安装及在web下图形界面的基本操控,现在来体验命令行操作及运行samples文件. 基本DDL操作 首先在视窗窗口同时按Ctrl+Alt+T,进入到命令行窗口 ...

  8. JavaScript高级程序设计之元素大小

    1.偏移量 // 元素相对于文档的偏移量 var getOffSet = function (ele) { var actualLeft = ele.offsetLeft, // 相对于offsetP ...

  9. win7虚拟打印驱动开发注意事项

    win7虚拟打印驱动开发注意事项 通过控制面板安装遇到以下问题:错误1.提示“Printer driver was not installed. Operation could not be comp ...

  10. java数据结构和算法------合并排序

      package iYou.neugle.sort; public class Merge_sort { public static void MergeSort(double[] array, i ...