JS高级(一)

1、JavaScript面向对象

  • 面向对象三大特性

    • 封装性

      • 把功能封装好
    • 继承性
    • 多态性
  • 面型对象优缺点
    • 易维护、可重用、可拓展、灵活性高
    • 性能不如面向过程

2、ES6中的类和对象

  • 类:抽象

    • 类模拟抽象的,泛指的,对象是具体的
  • 对象:具体

    • 类中的具体的某个实例【属性和方法的集合体】
    • 对象是由属性和方法组成的
      • 属性:事物的特征,在对象中用属性来表示(常用名词)
      • 方法:事物的行为,在对象中用方法来表示(常用动词)

3、面向对象的思维特点:

  • 抽取(抽象)对象共用的属性和方法组织(封装)成一个类(模板)
  • 对类进行实例化, 获取类的对象

4、类class

在ES6中新增加了类的概念,可以使用class关键字声明一个类,之后以这个类来实例化对象。【构造函数实例化对象】

  • 类抽象了对象的公共部分,它泛指某一大类(class)

  • 创建类

    语法:class 类名 {}【构造函数语法】
    
    注意类名首字母大写
    
    类要抽取公共属性方法,定义一个类
    class Star {
    };
    //类就是构造函数的语法
    var zs = new Star();
  • 类constructor构造函数

    class Star {
      constructor (uname,age){
          this.uname = uname;
          this.age = age;
      }
    }
    • 注意:
      • 类里面的方法不带function,直接写即可
      • 类里面要有属性方法,属性方法要放到类里面,我们用constructor构造器
      • 构造函数作用:接收参数,返回实例对象,
      • new的时候主动执行,主要放一些公共的属性
  • constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法。
  • 注意:每个类里面一定有构造函数,如果没有显示定义, 类内部会自动给我们创建一个constructor()
  • 注意:this代表当前实力化对象,谁new就代表谁

5、类添加方法

  • 语法:注意方法和方法之间不能加逗号
    class Star {
    
      constructor () {}
    
      sing () {}
    
      tiao () {}
    
    }
    //注意:类中定义属性,调用方法都得用this
    
    class 类名 { constructor(){}   方法名(){} }
  • 总结:类有对象的公共属性和方法,用class创建,class里面包含constructor和方法,我们把公共属性放到constructor里面,把公共方法直接往后写既可,但是注意不要加逗号

6、类的继承

  • extends

    语法:
    
    ? class Father {}
    
    ? class Son extends Father{}
    
    //注意:是子类继承父类
  • super关键字

    • 我们应用的过程中会遇到父类子类都有的属性,此时,没必要再写一次,可以直接调用父类的方法就可以了
    • super关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数
    • 当子类没有constructor的时候可以随意用父类的,但是如果子类也含有的话,constructor会返回实例,this的指向不同,不可以再直接使用父类的东西
  • 调用父类构造函数

    class F { constructor(name, age){} }
    
    class S extends F { constructor (name, age) { super(name,age); } }
    
    //注意: 子类在构造函数中使用super, 必须放到this 前面(必须先调用父类的构造方法,在使用子类构造方法)
  • 调用父类普通函数

    class F {
      constructor(name, age){}
      say () {}
    }
    
    class S extends F {
      constructor (name, age) {
        super(name,age);
      }
      say ()
      { super.say() }
    }
    
    //注意:如果子类也有相同的方法,优先指向子类,就近原则
  • 总结:super调用父类的属性和方法,那么查找属性和方法使用就近原则

7、三个注意点

  • 在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象.
  • 类里面的共有属性和方法一定要加this使用.【this,对象调用属性和方法】
  • 类里面的this指向问题.
  • constructor 里面的this指向实例对象, 方法里面的this 指向这个方法的调用者
    class Button {
    17.
      constructor () {
          var btn = document.querySelector('input');
          btn.onclick = this.cli;
      }
    
      cli () {
          console.log('点击了');
      }
    
    }
    
    var anniu = new Button();
    

8、类里面的this指向

  • 构造函数的this指向实例对象
  • 普通函数的this是调用者,谁调用this是谁
      <input type="button" value="点击">
      var that;
          class F {
              constructor (name, age) {
                  this.name = name;
                  this.age = age;
                  // console.log(this);
                  that = this;
                  this.btn = document.querySelector('input');
                  this.btn.onclick = this.cli;
              }
    
              cli () {
                  console.log(this);
              }
    
              say () {
                  console.log(this);
              }
          }
    
          var obj = new F('刘德华',22);
    

this指向

  • 构造函数里this指向实例对象
  • 方法里this指向调用者
    • 不调用时候this指向原型对象
    • 调用时候指向调用者

原文地址:https://www.cnblogs.com/itxcr/p/11600072.html

时间: 2024-10-20 19:32:51

JS高级(一)的相关文章

&lt;JS高级程序设计3&gt;_PART3

1.ECMAScript中所有数都以IEEE-754 64位格式存储,但位操作符不直接操作64位的值.是先64位转换成32位的整数,再操作,得到结果再转成64位. 2.首位是符号位.之后的31位代表整数的值. 3.用toString(2)打印二进制,得到的是被处理过的二进制. 4.按位非(NOT)~,数转成二进制,取反.相当于把操作数先变负再-1; 5.按位与(AND)&,两个数的二进制,有一个0结果就是0,两个都是1才为1. 6.按位或(OR)|,有一个1结果为1,都是0才为0. 7.按位异或

惰性函数——JS高级

原文地址:http://www.cnblogs.com/galenyip/p/4613430.html 我们先来看一下js的异步提交. XHR我们在原生的时候常常用到,因为常用到,我们更多把封装到了工具库中 先看下他最常用的实现 1 // 旧方法 2 3 function createXHR() { 4 var xhr; 5 try{ 6 xhr = new XMLHttpRequest(); 7 }catch(e) { 8 handleErr(e); 9 10 try { 11 xhr = n

&lt;JS高级程序设计3&gt;_PART4

1.基本数据类型:Undefined,null,Number,String,Boolean.引用数据类型:保存在内存中的对象. 2.JS不允许直接访问内存中的位置,不能直接操作对象的内存空间.所以操作对象时,实际上是操作的对象的引用,而不是实际的对象. 3. var num1 = 1; var num2 = num1; 一个基本类型的变量向另一个赋值时,执行了复制操作,两个变量互不影响. var obj1 = new Object(); var obj2 = obj1; obj1.age = 2

JS高级特性

一.JavaScript的同源策略 参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Same_origin_policy_for_JavaScript 同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin). 下表给出了相对http://store.c

JS高级前端开发群加群说明

JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明: 一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这样的成绩或这样一个结果也是情理之中,一方面来说,提倡的各种交流沟通方法大部分是正确有效或被大家认可的,另外一方面说,这么多人聚在一起,跟大伙的参与分享是分不开的,尤其是各群的管理,是我们的灵魂精神的支柱.另外在国内行业前进的道路上,尽自己的绵薄之力帮助他人,引领氛围,进而影响行业,也是略感欣慰.有时候精

读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺乏必要的绘图驱动程序,则浏览器即使支持了也没用   <canvas> var drawing = document.getElementById("drawing"); if( drawing.getContext ){ drawing.getContext("2d"

JS高级——闭包

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascrip

js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定

js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作.所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名.作为事件处理程序的函数和一个布尔值.最有这个布尔值参数是true,表示在捕获阶段调用事件处理程序:如果是false,表示在冒泡阶段调用事件处理程序. 要在按钮上为click事件添加事件处

PHP菜鸟学习历程-1 JS高级-34-昨天内容回顾

JS高级-34-昨天内容回顾     时间:2015-5-11 1.DOM获取元素节点 document.getElenmentById(id 属性值)                                   具体元素节点对象 document.getElenmentsByTagName(tag 标签名称 div ul li)        数组列表 document.getElenmentsByName(Name 属性值)                       数组列表 2.

JS高级之this是谁?

1 <!-- 2 英语单词:checkout:收银台 refresh:刷新 3 const Index = () => import('/page/index.vue')//等于const Index = function a(){return import('/page/index.vue')} 4 5 js高级之this是谁? 6 this本质上就是调用了就指向谁,this在指向谁有以下4种情况: 7 --------------------------------------------