美文网首页
JS面向对象

JS面向对象

作者: Mr_J316 | 来源:发表于2019-04-25 09:41 被阅读0次

2019-04-25

构造函数

Javascript提供了构造函数(Constructor)模式实现类的设计与封装。

function 构造函数名(参数1,参数2 … ){
    this.属性1 = 参数1;
    this.属性2 = 参数2;
    …..
    this.方法1  = function(参数1,参数2…){
    }
    ……
}

var 引用名 = new 构造函数名(参数1,参数2…);

class关键字

​ ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。类的数据类型本质就是函数。

class 类名{
    constructor(参数1,参数2… ) {
        this.属性1 = 参数1;
        this.属性2 = 参数2;
        ……
    }
    方法1(参数1,参数2…){
    }
    … ….
} 
var 引用名 = new 类名(参数1,参数2…);

继承

原型链继承

​ 每个JavaScript构造函数都有一个prototype属性,可以指向另一个对象。当访问对象某个属性时,JavaScript引擎会在该对象的所有属性中查找,如果没有找到就从prototype属性指向的对象中查找。

function Animal() {
    this.eat = function() {
        document.write("吃东西" + "<br />");
    }
}
function Bird() {
    this.fly = function() {
        document.write("飞行" + "<br />");
    }
}
Bird.prototype = new Animal();

var obj = new Bird();
obj.fly();
obj.eat();

使用call方法继承

function Account(id, password, balance) {
    this.id = id;
    this.password = password;
    this.balance = balance;
}
function CreditAccount(id, password, balance, overdraft) {
    Account.call(this, id, password, balance);
    this.overdraft = overdraft;
}

var acc = new CreditAccount("0001", "123456", 1000, 20000);
document.write("账号:" + acc.id + "<br />");
document.write("密码:" + acc.password + "<br />");
document.write("余额:" + acc.balance + "<br />");
document.write("透支额:" + acc.overdraft + "<br />");

通过实例直接继承

function Account(id, password, balance) {
    this.id = id;
    this.password = password;
    this.balance = balance;
}

var acc1 = new Account("0001", "123456", 1000);
var acc2 = Object.create(acc1);
acc2.overdraft = 20000;
document.write("账号:" + acc2.id + "<br />");
document.write("密码:" + acc2.password + "<br />");
document.write("余额:" + acc2.balance + "<br />");
document.write("透支额:" + acc2.overdraft + "<br />");

通过extends关键字继承

class 子类名 extends 父类名{
}
class CreditAccount extends Account{
    
    constructor(id, password, balance,overdraft) {
        super(id, password, balance);
        this.overdraft = overdraft;
    }
    
    show () {
       return super.show()+",透支额:"+this.overdraft;
    }
}

var acc1 = new CreditAccount ("0001", "123456", 1000, 5000);
document.write(acc1.show());

闭包

​ 变量的作用域有两种:全局变量和局部变量。JS在函数内部可以直接读取全局变量。在函数外部则无法读取函数内的局部变量。

// 既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,就可以在f1外部读取它的内部变量了
// f2函数即为闭包。
function f1(){
  var n=999;
  function f2(){
    alert(n); 
  }
  return f2;
}
var result = f1();
result();

​ 由于在Javascript语言中,只有函数内部的子函数才能读取函数的局部变量,因此可以把闭包简单理解成"定义在函数内部的函数"。

闭包的用处:

读取函数内部变量

将函数变量的值始终保持在内存中,延长生存期

相关文章

  • JS面向对象精要(二)_函数

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(三)_理解对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(四)_构造函数和原型对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(五)_继承

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • js 面向对象和面向过程

    js 面向对象和面向过程

  • 面向对象OOP--JS

    作者:烨竹 JS面向对象简介 JS名言:万物皆对象 JS面向对象比PHP简单很多;因为JS中没有class关键字,...

  • JavaScript笔记(一)

    一、面向对象面向过程的区别 1、什么是js对象 js对象:属性和方法的集合,js所有数据都可以看成对象...

  • JS面向对象

    JS面向对象入门 1、面向对象语言概念面向对象语言主要包括 类、对象、封装、多肽。2、面向对象的编程思想面向过程思...

  • 2018-01-18

    js中的面向对象核心 js是基于对象的编程语言,在后面的学习中我们通过一种模式使其转化成为面向对象的语言。js面向...

  • 浅谈JS中的面向对象

    浅谈JS中的面向对象 本文主要说说本人在JS中对面向对象的理解。 计算机编程语言主要分为面向过程式编程和面向对象式...

网友评论

      本文标题:JS面向对象

      本文链接:https://www.haomeiwen.com/subject/hmfagqtx.html