美文网首页程序员js笔记让前端飞
js笔记三十一之构造函数模式基础

js笔记三十一之构造函数模式基础

作者: uplyw | 来源:发表于2018-05-27 23:55 被阅读35次

构造函数基础

// 工厂模式
function createJsPerson(name,age){
    var obj = {}
    obj.name = name;
    obj.age = age;
    obj.writeJs = function(){
        console.log("my name is " + this.name + ",I can write js!")
    }
    return obj;
}
var p1 = createJsPerson("lilei",18);
p1.writeJs();

构造函数模式的目的就是为了创建一个自定义类, 并且创建这个类的实例

构造函数模式和工厂模式的区别:

  1. 执行的时候:
    普通函数执行 -> createJsPerson()
    构造函数执行 -> new createJsPerson() 通过new执行后, createJsPerson就是一个类了
    而函数执行的返回值(p1)就是CreateJsPerson这个类的一个实例
  2. 在函数代码执行的时候:
    相同: 都是形成一个私有的作用域, 然后形参赋值 -> 预解释 -> 代码从上到下执行(类和普通函数一项, 它也有普通函数的一面)
    不同: 在代码执行之前, 不用再手动创建obj对象了, 浏览器会默认的创建一个对象数据类型的值(这个对象其实就是当前类的一个实例);
    接下来代码从上到下执行, 以当前的实例为执行的主体(this代表的就是当前的实例), 然后分别的把属性名和属性值赋值给当前的实例
    浏览器会默认的实例返回
function CreateJsPerson(name,age){
    // 浏览器默认创建的对象就是实例 p1
    this.name = name; // -> p1.name = name
    this.age = age; // -> p1.age = age
    this.writeJs = function(){
        console.log("my name is " + this.name + ",I can write js!")
    }
    // 浏览器会把创建的实例默认的进行返回
}
// 因为内置类首字母大写,所以我们约定自己创建的类首字母也大写
var p1 = new CreateJsPerson("lilei",18); 
p1.writeJs();
var p2 = new CreateJsPerson("hanmeimei",16); 
p2.writeJs(); 

res = CreateJsPerson("liyanwei",26);
// 这样写不是构造函数模式执行,而是普通的函数执行, 由于没有写return, 所以 res=undefined 并且CreateJsPerson这个办法中的this是window
console.log(res) // undefined

创建一个数组

var ary = []; // 字面量方式
var ary = new Array(); // 实例创建的方式 -> 构造函数模式执行的方式

// 不管哪种方式,ary都是Array这个类的一个实例

js中所有的类都是函数数据类型的, 它通过new执行变成了一个类, 但是它本身也是一个普通的函数
js中所有的实例都是对象数据类型的

在构造函数模式中,类中(函数体中)出现的 this . xxx = xxx中的this是当前类的一个实例

p1和p2都是CreateJSPerson这个类的实例, 所以都拥有writeJS这个方法, 但是不同实例之间的方法是不一样的
在类中给实例增加的属性( this.xxx = xxx)属于当前实例的私有的属性, 实例和实例之间是单独的个体, 所以私有的属性之间是不相等的

console.log(p1.writeJs === p2.writeJs); // -> false

相关文章

  • js笔记三十一之构造函数模式基础

    构造函数基础 构造函数模式的目的就是为了创建一个自定义类, 并且创建这个类的实例构造函数模式和工厂模式的区别:执行...

  • javascript 笔记03(创建对象/原型模式/js 继承/

    js 笔记3 接笔记2 13.创建对象 工厂模式 构造函数模式 以这种方式调用构造函数实际上会经历以下 4 个步骤...

  • Js创建对象的几种模式

    Js创建对象的几种模式 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式 稳妥构造函数模式

  • JavaScript创建对象之原型模式

    一、原型基础 在之前的文章:《JavaScript创建对象之单例、工厂、构造函数模式》中详细介绍了构造函数模式创建...

  • 2020-12-15

    js对象的创建和函数 创建对象 工厂模式 构造函数 原型方式+构造函数

  • js常见设计模式

    1.写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。 JS设计模式大全 构造函数模...

  • js面向对象基础—常用设计模式

    这篇文章主要介绍了面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式,需要的朋友可以参...

  • 2017-4-1 VUE

    JS的方法 1、类型判断的方法 2、创建对象构造函数 3、JS基础函数和语法

  • js继承

    关于js继承,阮一峰的文章介绍的非常详细; 继承两种模式:1.构造函数模式2.非构造函数模式 http://www...

  • JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式...

网友评论

    本文标题:js笔记三十一之构造函数模式基础

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