[面试专题]js之面向对象(OOP)

news/2024/7/5 8:51:46

js之面向对象(OOP)

js对象类型(Object)

  1. js数据类型分六类,简单类型:Undefined,Null,Bollean,Number,String五种,复杂类型:Object.
    其中Undefined、Null、Boolean、Number也属于基本类型。Object、Array和Function则属于引用类型

  2. 其中Null类型表示一个空对象引用,typeof (null类型)会返回object

  3. 简单类型和复杂类型之间的关系:js中一切皆对象,所以以上简单类型也是对象,但是创建方法不同,利用typeof 检测类型时结果也不同.(这个typeof真是没啥用).例如下例中两个,但是本质上都是对象.

    var name = String("jwy");
    alert(typeof name);//"object"
    var author = "Tom";
    alert(typeof author);//"string"

盘点JS面向对象之继承


原型链

即利用原型链让一个引用类型继承另一个应用类型的方法和属性.
缺点:

  • 重写了原有的prototype,constructor指向了超类.

  • prototype是超类的实例,因此超类属性会被所有子类实例共享.

  • 创建子类实例时,不能向超类构造函数传参.

function Subtype(){
    //构造函数
}
Subtype.prototype = new Supertype();

借用构造函数(经典继承)

即在子类构造函数中调用超类构造函数,通过call或者apply来绑定上下文对象.

function Subtype(){
 Supertype.call(this);//也可传参
}

缺点:

  • 和构造函数模式一样,方法在构造函数中定义,因此就无法实现函数复用(作为方法)

  • 在超类型的原型中定义的方法,对子类型而言也是不可见的

组合继承(伪经典继承)

即原型链+经典继承,利用原型链继承原型属性和方法,利用借用构造函数继承实例属性

function SuperType (name) {
     this.name = name;
     this.color = ['red'];
}
SuperType.prototype.sayName = function () {
     console.log(this.name) 
}
function SubType (name,age) {
     SuperType.call(this,name) 
     this.age = age;    
}
SubType.prototype = new SuperType();
SubType.constructor = SubType;
SubType.prototype.sayAge = function () {
     console.log(this.age) 
}
var subInstance = new SuperType('zchang',11);
var subInstance1 = new SuperType('zc',18);

寄生式继承

即创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后返回该对象.

function createAnother (origin) {
     var clone = objects(origin);//某个函数创建新对象
     clone.sayHi = function () {
          console.log('hi') 
     }
     return clone;
}

组合寄生式继承

function SuperType(name) {
    this.name = name;
    this.color = ['red'];
}
SuperType.prototype.sayName = function() {
    console.log(this.name)
}

function SubType(name, age) {
    SuperType.call(this, name)
    this.age = age;
}
// SubType.prototype = new SuperType();
function inheritPrototype(subtype, supertype) {
    var prototype = object(supertype);
    prototype.constructor = subtype;
    subtype.prototype = prototy
}
inheritPrototype(SubType, SuperType);
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function() {
    console.log(this.age)
}
var subInstance = new SuperType('zchang', 11);
var subInstance1 = new SuperType('zc', 18);

http://www.niftyadmin.cn/n/4083973.html

相关文章

数据库的安全性管理概述

sql Server 安全性管理一、SQL Server的登录管理1、身份验证:用于判断访问者身份是否合法的过程。2、SQL Server提供了两种身份验证方式:Windows身份验证混合身份验证3、Windows身份验证通过Windows帐户连接到Windows操作系统之后,SQL sERVER…

代码复用与函数递归

代码复用与模块化设计: 代码复用: 把代码当成资源进行抽象 代码资源化:程序代码是一种用来表达计算的“资源” 代码抽象化:使用函数等方法对代码赋予更高级别的定义 代码复用:同一份代码在需要时可以被重复使用&a…

前端框架Layui的使用讲解(Layui搭建登录注册页面)

目录 一、前言 1.什么是Layui 2.Layui的背景 3.为什么要使用Layui 4.Layui的模块化 二、Layui使用讲解 1.初识Layui 2.搭建登录页面 静态效果图​ 封装引入文件页面(公用页面) jsp页面搭建 userDao编写 Servlet页面编写 xml文件配置 3.搭…

大数据处理的关键架构层

大数据处理的关键架构层 文件系统层:在这一层里,分布式文件系统需具备存储管理、容错处理、高可扩展性、高可靠性和高可用性等特性。 数据存储层:由于目前采集到的数据,十之有七八为非结构化和半结构化数据,数据的表…

PyInstaller库基本介绍

将.py源代码转换成无需源代码的可执行文件 .py文件通过PyInstaller转换为Windows系统可以直接运行的(.exe文件),Linux系统,Mac OS X系统可以运行的。 将py扩展名的任何python的源代码转变成Windows、Linux系统,Mac OS X系统的可…

科赫雪花小包裹实例详解

高大上的分形几何 分形几何是一种迭代的几何图形,广泛存在于自然界中(树叶,菜花)(这个东西的整体与他的局部具有很相似的特点) 分形几何中有一种特殊的曲线叫做科赫曲线,也叫雪花曲线 科赫曲…

Step by Step SharePoint 2010 Install RTM

http://blogs.architectingconnectedsystems.com/blogs/cjg/archive/2010/05/27/Step-by-Step-SharePoint-2010-Instal-RTM.aspx转载于:https://www.cnblogs.com/joe-yang/archive/2010/06/05/1752379.html

组合数据类型(集合)

组合数据类型包括集合类型及操作、序列类型及操作(元组类型和列表类型)、字典类型及操作 集合是多个元素的无序组合 集合类型与数学中的集合概念一致,数学中的集合是指具有某种特定性质的对象汇总而成的集体,其中组成集合的对象…