Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

    • JavaScript语法

    • JavaScipt对象

    • JavaScript实例

      • JavaScript-对象应用
        • JavaScript-map与forEach
        • JavaScript-sort()
        • JavaScript-防抖节流
      • JavaScript浏览器BOM

      • JavaScript DOM

    • Vue2

    • port

    • CSS

    • Node.js

    • JavaScript优化

    • uniapp

    • Mini Program

    • TypeScript

    • 面向对象编程

    • UI组件

    • Plugin

    • Vue3

    • 性能优化

    • Axios

    • 状态管理

    • React

    • Mock

    • Icon

    • Template

    • 构建工具

    • 项目规范配置

    • Taro

    • SVG

    • React Native

    • 前端
    • JavaScript
    • JavaScript实例
    HiuZing
    2022-10-08
    目录

    JavaScript-对象应用

    # 声明和实例化

    对象的创建方式是用关键字 new 后面跟上实例化的类的名字

    var oObject = new Object();
    var oStringObject = new String();
    
    1
    2

    # 对象废除

    把对象的所有引用都设置为 null,可以强制性地废除对象

    var oObject = new Object;
    // do something with the object here
    oObject = null;
    
    1
    2
    3

    当变量 oObject 设置为 null 后,对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时,该对象将被销毁。

    # 对象作用域

    静态作用域

    严格来说,ECMAScript 并没有静态作用域。不过,它可以给构造函数提供属性和方法。还记得吗,构造函数只是函数。函数是对象,对象可以有属性和方法。例如:

    function sayHello() {
      alert("hello");
    }
    
    sayHello.alternate = function() {
      alert("hi");
    }
    
    sayHello();		//输出 "hello"
    sayHello.alternate();	//输出 "hi"
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 定义类或对象

    工厂方式

    函数 createCar() 可用于封装前面列出的创建 car 对象的操作

    function createCar() {
      var oTempCar = new Object;
      oTempCar.color = "blue";
      oTempCar.doors = 4;
      oTempCar.mpg = 25;
      oTempCar.showColor = function() {
        alert(this.color);
      };
      return oTempCar;
    }
    
    var oCar1 = createCar();
    var oCar2 = createCar();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    ​ 为函数传递参数

    function createCar(sColor,iDoors,iMpg) {
      var oTempCar = new Object;
      oTempCar.color = sColor;
      oTempCar.doors = iDoors;
      oTempCar.mpg = iMpg;
      oTempCar.showColor = function() {
        alert(this.color);
      };
      return oTempCar;
    }
    
    var oCar1 = createCar("red",4,23);
    var oCar2 = createCar("blue",3,25);
    
    oCar1.showColor();		//输出 "red"
    oCar2.showColor();		//输出 "blue"
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    构造函数方式

    创建构造函数就像创建工厂函数一样容易。第一步选择类名,即构造函数的名字。根据惯例,这个名字的首字母大写,以使它与首字母通常是小写的变量名分开。除了这点不同,构造函数看起来很像工厂函数。请考虑下面的例子:

    function Car(sColor,iDoors,iMpg) {
      this.color = sColor;
      this.doors = iDoors;
      this.mpg = iMpg;
      this.showColor = function() {
        alert(this.color);
      };
    }
    
    var oCar1 = new Car("red",4,23);
    var oCar2 = new Car("blue",3,25);
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    首先在构造函数内没有创建对象,而是使用 this 关键字。使用 new 运算符构造函数时,在执行第一行代码前先创建一个对象,只有用 this 才能访问该对象。然后可以直接赋予 this 属性,默认情况下是构造函数的返回值(不必明确使用 return 运算符)。

    就像工厂函数,构造函数会重复生成函数,为每个对象都创建独立的函数版本。不过,与工厂函数相似,也可以用外部函数重写构造函数,同样地,这么做语义上无任何意义。这正是下面要讲的原型方式的优势所在。

    原型方式

    该方式利用了对象的 prototype 属性,可以把它看成创建新对象所依赖的原型。

    这里,首先用空构造函数来设置类名。然后所有的属性和方法都被直接赋予 prototype 属性。我们重写了前面的例子,代码如下:

    function Car() {
    }
    
    Car.prototype.color = "blue";
    Car.prototype.doors = 4;
    Car.prototype.mpg = 25;
    Car.prototype.showColor = function() {
      alert(this.color);
    };
    
    var oCar1 = new Car();
    var oCar2 = new Car();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    上次更新: 2024/08/14, 04:14:33
    JavaScript-全局属性
    JavaScript-map与forEach

    ← JavaScript-全局属性 JavaScript-map与forEach→

    最近更新
    01
    React Native 使用SVG
    08-13
    02
    Docker基础命令
    08-04
    03
    算数逻辑单元
    07-30
    更多文章>
    Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式