IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript面向对象之对象-学习笔记 -> 正文阅读

[JavaScript知识库]JavaScript面向对象之对象-学习笔记

在这里插入图片描述

1 对象与构造函数

JavaScript对象是基于构造函数(constructor)和原型链(prototype)的,在JavaScript这门语言中并没有“类”(class)这个概念

那么什么是对象呢?简单地说,对象就是现实世界中的实物的抽象

那对象又如何被创建呢?首先我们将现实世界中的实物抽象为模板——构造函数,具体来说,就是用属性来表示实物的某些特征,用方法来表示实物的某些行为,然后利用这个模板就可以创建实例对象了。

下面来举个实例,例如:我们将一种交通工具抽象为一个构造函数Vehicle,内部使用的关键字this代表所要生成的对象实例。

注:这里为了和普通函数有所区分,故将首字母大写,也推荐大家这样去书写。

var Vehicle = function () {
	//属性
    this.brand = "沃尔沃"
    this.price = 500000;
    //方法
    this.run = function (){
		console.log("我是在公路上跑的小轿车");
	}
}

具体到如何创建对象,请继续往下看。

2 对象的创建方法

2.1 通过new命令创建对象

new命令可以执行构造函数,返回一个实例对象

  1. 构造函数可以不带参数,示例如下:

     var Vehicle = function () {
         this.brand = "沃尔沃"
         this.price = 500000;
         this.run = function (){
     		console.log("我是在公路上跑的小轿车");
     	}
     }
    
    var v = new Vehicle();
    v.brand // 沃尔沃
    v.price // 500000
    v.run() // 我是在公路上跑的小轿车
    
  2. 构造函数也可以带参数,示例如下:

    var Vehicle = function (brand, price) {
        this.brand = brand;
        this.price = price;
    }
    
    var v = new Vehicle("奔驰", 1000000);
    v.brand //奔驰
    v.price //1000000
    
  3. 当然我们也可以像调用普通函数一样创建对象:这里其实是改写了构造函数,在内部做判断,若像普通函数进行调用,则在构造函数内部创建一个对象(这不就是单例模式中的懒汉式创建方法嘛😂,有了学习Java的感觉了)。

    function Vehicle(brand, price) {
        if(!(this instanceof Vehicle)) {
            return new Vehicle(brand, price);
        }
        
        this.brand = brand;
        this.price = price;
    }
    
    Vehicle("宝马",800000).price
    (new Vehicle("宝马",800000)).price
    

    我们在浏览器控制台测试一下,结果如下:这样两种创建方式效果是一致的。

    在这里插入图片描述

  4. 上述函数要是不在函数中加if代码块,直接调用会返回undefined,并没有给出提示告知我们忘记使用new命令来创建对象了,相反,忘记加new命令反而会将其作为普通函数进行调用了,由于没有返回值,因此结果为undefined,直至将其当成对象,访问其属性时才会报错。
    在这里插入图片描述
    为了避免在创建对象时忘记写new关键字,我们可以使用严格模式:如下所示,在构造函数的开始加上'use strict';

    var Vehicle = function (brand, price) {
        'use strict';
        this.brand = brand;
        this.price = price;
    }
    

    如下图所示:实际测试在严格模式下,不带new关键字会在创建时就出错。

    在这里插入图片描述

2.2 通过Object.create()方法创建对象

我们也可以使用一个现有的对象作为模板,生成一个新的实例对象,这就要借助Object.create()方法了。

如下例子所示:我们将p1对象作为一个模板创建了p2对象,并且p2继承p1的属性和方法。

var p1={
    name:'张三',
    age:22,
    greeting: function(){
        console.info("Hi, I\'m " + this.name + ".");
    }
}

var p2=Object.create(p1);
p2.name //张三
p2.greeting() //Hi, I'm 张三.

3 new命令的内部原理

其实在使用new命令创建对象之前就需要做一些前期准备,具体操作如下:

  1. 首先创建一个空对象;
  2. 将这个空对象的原型,指向构造函数的prototype属性;
  3. 而后将这个空对象赋值给函数内部的this关键字(this指向的是新生成的空对象);
  4. 此时才开始执行构造函数内部的代码,最后对象就被创建出来了。

这么看来,构造函数果然人如其名,通过操作一个空对象(即this),将其构造成需要的样子(在构造函数中对this赋值)。

于是乎可以这么说new命令总是会返回一个对象,我们拿一个普通函数使用new命令,此时会返回一个空对象,测试如下:

在这里插入图片描述

上面的例子中忽略了return后面的字符串,便返回了一个对象,由于函数中并没有针对this即空对象的赋值操作,因此为一个空对象。

4 new.target

函数内部可以使用new.target属性,它有两种值:

  1. 若当前函数使用new命令调用,则new.target指向的为当前函数;
  2. 若像普通函数进行调用,则new.target的值为undefined

测试代码如下:

function f(){
    console.log(new.target === f);
}

f()
new f()

测试结果如下:

在这里插入图片描述

使用这个属性可以用来判断函数被调用时是否使用了new命令。

function f(){
    if(!new.target){
        console.log('您直接调用了函数');
    }else{
        console.log('您使用了new命令调用了函数');
    }
}

测试结果如下:new.targetundefined时对应的布尔值为false,当为对象时对应的布尔值则为true(关于类型转换请移步至JavaScript数据类型转换-学习笔记)。

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:39:12  更:2021-07-30 12:40:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 23:50:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码