JavaScript系列从入门到精通系列第二十篇:使用工厂方法创建JavaScript对象,JavaScript构造函数详解,JavaScript类概念的介绍

文章目录

一:使用工厂方法创建对象

1:原始写法

2:工厂方式

3:结果验证

二:构造函数

1:什么是构造函数

2:构造函数和普通函数的区别

3:构造函数的执行流程

三:类

1:什么是类

2:如何检查一个对象是否是个类的实例

3:Object的地位

四:构造函数修改

1:重大问题

2:如何改造


一:使用工厂方法创建对象

1:原始写法

javascript 复制代码
var obj = {
    name: "孙悟空",
    age:18,
    gender:"男"
    sayName:function (){
        alert(this.name)
    }
}

obj.sayName();//孙悟空

var obj2 = {
    name: "猪八戒",
    age:18,
    gender:"男"
    sayName:function (){
        alert(this.name)
    }
}

var obj2 = {
    name: "沙和尚",
    age:18,
    gender:"男"
    sayName:function (){
        alert(this.name)
    }
}

这种频繁创建对象没有问题,但是太繁琐了。我们可以使用工厂方式创建对象。

2:工厂方式

javascript 复制代码
//使用工厂方法创建对象
function createPerson(name,age,gender){
    //创建一个对象
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.gender = gender;
    obj.sayName  = function(){
        alert(this.name);
    }
    return obj;
}

var obj = createPersion('孙悟空',19,'男');
console.log(obj.sayName());

3:结果验证

使用工厂方法创建的对象,使用的构造函数都是Object,所以创建的对象都是Object的类型。 这就导致我们无法区分多种不同类型的对象。

二:构造函数

1:什么是构造函数

我们创建狗对象和人对象,都是通过new Object()创建的对象。现在我们想区分一下类型。就比如,我们特别想new Person()这样的构造函数,或者new Dog()这样的构造函数,但是事实证明这样一运行就报错了。Person is not defined

2:构造函数和普通函数的区别

这里边我们就可以创建一个构造函数,专门创建一个Person对象。构造函数就是一个普通函数。创建方式和普通方式没有区别,但是构造函数习惯上首字母大写。

构造函数和普通函数的区别就是调用方式不同,普通函数是直接调用,而构造函数需要使用new关键字进行调用。

javascript 复制代码
function Person(){
}

var per = new Person();

调用时候,加new是构造函数的调用方式。不加new是普通函数的执行流程

3:构造函数的执行流程

javascript 复制代码
function Person(name,age,gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
}

var per = new Person("孙悟空",18,'男');

console.log(per);

1: 调用构造函数立刻创建一个对象

2:将新建的对象设置为函数中的this,在构造函数中,可以使用this来引用新创建的对象。

3:逐行执行函数中的代码

4:将对象作为返回值进行返回,这就是构造函数神奇的地方,没有返回语句,却可以返回创建对象。

三:类

1:什么是类

什么是类?构造函数就是类。

2:如何检查一个对象是否是个类的实例

javascript 复制代码
function Person(name,age,gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
}

var per = new Person("孙悟空",18,'男');

console.log(per);

console.log(per instanceof Person)

结果验证:

3:Object的地位

所以的对象都是Object的后代,所以所有对象instanceof Object都是true。

四:构造函数修改

1:重大问题

javascript 复制代码
//使用工厂方法创建对象
function createPerson(name,age,gender){
    //创建一个对象
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.gender = gender;
    obj.sayName  = function(){
        alert(this.name);
    }
    return obj;
}

var obj = createPersion('孙悟空',19,'男');
var obj1 = createPersion('孙悟空',19,'男');
var obj2 = createPersion('孙悟空',19,'男');

obj与obj1与obj2之间的三个对象之间都有这个sayName函数对象,并且地址不相等。

2:如何改造

将sayName方法在全局作用域中进行定义。

javascript 复制代码
function fun (){
     alert(this.name);
 }
//使用工厂方法创建对象
function createPerson(name,age,gender){
    //创建一个对象
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.gender = gender;
    obj.sayName  = fun;
    return obj;
}

var obj = createPersion('孙悟空',19,'男');
var obj1 = createPersion('孙悟空',19,'男');
var obj2 = createPersion('孙悟空',19,'男');

这样构造函数执行一万次,最终的函数对象都只有一个。

相关推荐
脚踏实地皮皮晨12 分钟前
003006001_WrapPanel控件
开发语言·c#·.net·wpf·visual studio
上海安当技术34 分钟前
单点登录 SSO 怎么选协议?SAML 2.0 / OAuth 2.0 / OIDC / CAS 对比与 ERP、OA、CRM 接入实战
java·开发语言
不才不才不不才1 小时前
Spring 源码系列(14): JDK 动态代理 vs CGLIB,以及拦截器责任链
java·开发语言·spring
mifengxing1 小时前
计算机组成原理——存储器系统
开发语言·考研·计算机组成原理·复习笔记·计算机408
only-lucky1 小时前
QML深入学习五(Controls模块)
前端·javascript·学习
Yolanda_20222 小时前
Python学习-第九部分-错误处理与异常处理
开发语言·python·学习
郝学胜-神的一滴2 小时前
Qt 高级编程 037:QSS按钮样式封神指南
开发语言·c++·qt·软件工程·用户界面
DFT计算杂谈2 小时前
SCIENTIFIC REPORTS 非 van der Waals可调二维磁性材料设计平台
开发语言·php
库拉库拉里2 小时前
深入理解 C# 异步编程:同步、Task.Wait () 与 await 的本质区别及实践指南
开发语言·c#
霍霍的袁2 小时前
【C++】string类 从 入门使用 到 底层深浅拷贝模拟实现
开发语言·c++·visual studio