首页
学习
活动
专区
圈层
工具
发布

工厂函数和构造函数

---- theme: channing-cyan 这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战 工厂函数 工厂模式是一种设计模式,说白了就是一种简单的函数,这个函数可以创建对象,为它添加属性和方法...,在实际开发中,我们用构造函数的频率一般会大于用工厂函数的频率。...构造函数虽然好用,但是也有一些问题,我们分析一下逻辑 上面的例子,person1和person2都有一个sayName()方法,但这俩个方法却不是同一个function实例,相当于这里定义的方法sayName...因为这一次 sayName 属性中包含的只是一个指向外部函数的指针,所以 person1 和 person2共享了定义在全局作用域上的 sayName()函数。...这会导致自定义类型引用的代码不能很好地聚集一起。这个新问题可以通过原型模式来解决。 我们下一次讲解原型(可以mark一下我的文章,谢谢)

98320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    构造函数和原型

    静态成员和实例成员 JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this.上添 加。通过这两种方式添加的成员,就分别称为静态成员和实例成员。...5.对象原型 对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法, 就是因为对象有 __proto...__proto__ === Star.prototype); //true 6.constructor构造函数 对象原型( __proto__)和构造函数(prototype)原型对象里面都有一个属性...构造函数实例和原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的...10.原型对象中this指向 构造函数中的this和原型对象的this,都指向我们new出来的实例对象 function Star(uname, age) {    this.uname = uname

    60350

    构造函数和原型

    1.构造函数和原型 1.1对象的三种创建方式--复习 字面量方式 var obj = {}; new关键字 var obj = new Object(); 构造函数方式...1.4构造函数原型prototype 1.构造函数通过原型分配的函数是所有对象所共享的。 2.JavaScript 规定,每一个构造函数都有一个prototype 属性,指向另一个对象。...对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法,就是因为对象有 __proto__ 原型的存在...1.8构造函数实例和原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的...this指向 构造函数中的this和原型对象的this,都指向我们new出来的实例对象 function Star(uname, age) { this.uname = uname; this.age

    45010

    JS高级——构造函数和原型

    构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总于new一起使用,我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。...通过这俩种方式添加的成员,就分别称为静态成员和实例成员。 静态成员:在构造函数本身上添加的成员称为静态成员,只能由构造函数本身来访问。...构造函数原型prototype 构造函数通过原型分配的函数是所有对象所共享的。...共享方法 对象原型 proto 对象都会有一个属性 __proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有 __...constructor 构造函数 对象原型(__proto__)和构造函数(prototype)原型对象里面都有一个属性 constructor属性,constructor我们称为构造函数,因为它指回构造函数本身

    1.7K10

    「JS高级」构造函数和原型

    1.构造函数和原型1.1对象的三种创建方式--复习1、... 请注意,本文编写于 2063 天前,最后修改于 173 天前,其中某些信息可能已经过时。...1.构造函数和原型 1.1对象的三种创建方式--复习 1、字面量方式: var obj = {}; 2、new关键字: var obj = new Object(); 3、构造函数方式 function...__proto__ 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法,就是因为对象有 __proto__ 原型的存在。...因为有__proto__ 的存在,就去构造函数原型对象prototype身上去查找sing这个方法 1.6constructor构造函数 对象原型( __proto__)和构造函数(prototype)...1.8构造函数实例和原型对象三角关系 构造函数的prototype属性指向了构造函数原型对象; 实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象; 构造函数的原型对象的

    1.8K50

    构造函数、原型、原型链、继承

    任何一个函数,只要使用了new关键字,它就成了构造函数。...__proto__.constructor === man.constructor; //true 构造-原型组合模式 根据对象的特性,对象上没有的属性会在原型对象中寻找,所以可以把公共的属性和方法给到原型对象上去...__proto__.greeting = function(){ return 'Hi, there'; } man.greeting(); //Hi, there 动态原型模式 这种模式把给对象添加属性以及给原型添加属性的动作都放到了构造函数里...,就会形成函数、对象、原型之间的三角关系: 此时如果让实例对象指向另一个构造函数的实例对象,这个关系就变成了这样: 实例对象A和实例对象B被一个__proto__属性链接起来了,这已经是一个具有两个节点的链条了...省略分析推导过程,这里只介绍最实用和可靠的实现继承的方式:组合继承,为了方便描述,引入“父类函数”和“子类函数”这两个概念: //父类函数 function Father(name, age){ this.name

    91520

    JavaScript 工厂函数 vs 构造函数

    当谈到JavaScript语言与其他编程语言相比时,你可能会听到一些令人困惑东西,其中之一是工厂函数和构造函数。...一个函数要作为一个真正意义上的构造函数,需要满足下列条件: 在函数内部对新对象(this)的属性进行设置,通常是添加属性和方法。...如果我们在工厂和构造函数中使用new关键字会发生什么 如果在使用构造函数创建对象实例时不使用new关键字会发生什么 好的,试着找出以上问题的答案之前,我们先做一个小练习来理解这里面发生了什么。...使用new关键字同时使用工厂和构造函数创建两个对象,接着在控制台打印这两个对象。...当我们使用工厂函数创建对象时,它的__proto__指向Object.prototype,而当从构造函数创建对象时,它指向它的构造函数原型对象。 那么这里发生了什么?

    1.2K20

    typescript中的工厂函数

    TypeScript中的工厂函数(登录登出) 工厂函数是一种特殊的函数,用于创建和返回对象或其他数据结构。它通常用于封装和组织代码,允许动态地创建多个实例或对象,每个实例可能具有不同的属性或行为。...详细解释它的特点和用法: 目的: useLoginApi 的目的是创建一个包含两个方法的对象,用于处理登录和登出操作。这样可以将登录和登出的逻辑封装到一个单独的函数中,使代码更有组织性和可重用性。...返回值: 该函数返回一个对象,该对象有两个属性 signIn 和 signOut,分别对应登录和登出操作的方法。 参数: useLoginApi 函数本身没有接受任何参数。...它只是一个工厂函数,用于创建对象。 对象属性和方法: signIn: 一个函数,接受一个参数 data(一个对象),该函数用于发起登录请求。...使用方法: 导入函数: 首先,在你想要使用这个工厂函数的文件中,导入它: import { useLoginApi } from '.

    62610

    JavaScript笔记(2) 构造函数和原型

    构造函数和原型 目标: 这些之前都学过的我就不多赘述了,直接将图片贴上来了 JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this上添加....通过这两种方式添加的成员,就分别称为静态成员和实例成员 静态成员: 在构造函数本身添加的成员称为静态成员,只能由构造函数本身来访问 实例成员: 在构造函数内部创建的成员称为实例成员,只能由实例化的对象来访问...构造函数原型prototype 构造函数通过原型分配的函数是所有对象所共享的....对象原型__proto__ 对象都会有一个属性__proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__proto...constructor构造函数 对象原型和构造函数的原型对象里面都有一个属性constructor属性,constructor我们称为构造函数,因为它指回构造函数本身 如果我们直接打印Star.prototype.constructor

    45710

    javascript中常用的创建对象的方法工厂模式构造函数模式原型模式混合使用构造函数模式和原型模式小结

    由此,我们就引出了下一种的方法,原型模式 原型模式 原型对象简而言之,就是每个构造函数创建的对象都有一个指针,这个指针指向它的原形对象,而原形对象也和普通对象一样具有属性和方法,但不同的事,原形对象的属性和方法是让所有实例共享的...但原型模式,显然存在一个问题就是,并不是所有东西都是共享的,所以实际中,我们常常将原型模式与工厂模式或者构造函数模式结合起来。联合使用。对于那些需要共享的属性和方法,我们就把它加入到原型对象中。...** 需要注意的是,如果实例对象和原型对象中的存在相同的属性和方法,那么js会先从实例中搜寻,如果找到了就忽略原型对象中的,如果在实例中没有找到,就继续到原型中寻找 ** 混合使用构造函数模式和原型模式...构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的引用,最大限度地节省了内存。...,工厂模式,构造函数模式,原型模式,构造函数模式和原型模式的组合使用。

    1.5K30

    再谈构造函数、原型、原型链之间的关系

    前言 构造函数、原型、原型链作为ES5的内容,已经是老生常谈的问题了。首先说说为什么要再次拿起这个话题去说呢?...构造函数 什么是构造函数?构造函数就是使用关键字new创建对象时调用的函数。...构造函数的属性可分为两种:1.实例上的属性 2.公用属性 //实例上的属性 function Animal(){ this.name=name; this.age=18; } 原型 原型是每个构造函数都有的...,在JS规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,注意这个prototype就是一个对象,这个对象的所有属性和方法都会被构造函数所拥有。...原型的作用是共享方法,一般情况下,我们的公共属性定义在构造函数里面,公共的方法放到原型对象上。

    79320

    js 中的构造函数,构造函数作用,构造函数和普通函数的区别

    之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数的主要 功能为 初始化对象,特点是和new 一起使用。new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。...并且该对象继承函数的原型; 属性和方法被加入到this引用的对象中; 隐式返回this对象(如果没有显性返回其他对象) 简单的说 用new调用构造函数,最大特点为,this对象指向构造函数生成的对象...6、 构造函数和普通函数的区别 1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写。 2、调用方式不一样。...(ES6 中 class 与构造函数的关 系,通过class定义的类 和通过构造函数定义的类 二者本质相同。并且在js执行时,会将第一种转会为第二种执行。...所以 ES6 class的写法实质就是构造函数) 4、内部用this 来构造属性和方法 5、构造函数的执行流程 A、立刻在堆内存中创建一个新的对象 B、将新建的对象设置为函数中的this C、

    4.8K10

    【Dart 专题】Factory 工厂构造函数

    Constructors 默认构造函数、Named Constructors 命名构造函数、Constant Constructors 常量构造函数和 Factory Constructors 工厂构造函数...; Default Constructors 默认构造函数与 Java 类似,可以是无参构造函数和有参构造函数;但与 Java 不同的是,Dart 构造函数不允许重载,即不允许有相同名称的构造函数...Named Constructors 使用命名构造函数可以为实现多个构造函数或提供更清晰的构造函数;同时子类需要实现 super() 构造函数类型完全取决于父类构造函数类型;其中命名构造函数是不允许被继承的...Factory Constructors 工厂构造函数不需要每次构建新的实例,且不会自动生成实例,而是通过代码来决定返回的实例对象;工厂构造函数类似于 static 静态成员,无法访问 this...People.map() 时,先判断该实例是否已完成构造,若已存在则返回 _cache 实例,不存在则构建新的实例;如 Demo 中的 people 和 people2,调用工厂函数时,people

    1.6K30

    【JS精粹】原型链继承和构造函数继承的 “毛病”

    因为这门语言设计就是这样,我们之前也提过:JavaScript的语言设计主要受到了Self(一种基于原型的编程语言)和 Scheme(一门函数式编程语言)的影响; 它复用的能力就是来自原型!...原型链中的函数和对象》 这里还是用代码展示下它们的指向关系吧: 上面例子中有 1 个对象 instance , 两个函数,SuperType 和 SubType 。函数是上帝,对象是基本物质。...构造函数继承 构造函数继承,也叫做:“盗用构造函数”,“对象伪装”或“经典继承”。 基本思路:在子类构造函数中用 apply()和 call()方法调用父类构造函数。...,但是它也有它的问题,也是使用构造函数模式自定义类型的问题, 即:必须在构造函数中定义方法(在原型上定义方法,子类是访问不到的),函数不能重用。...思路是:使用原型链继承原型上的属性和方法,而通过构造函数继承实例属性。

    1.5K20

    理解构造函数与原型对象

    ,而方法对应的就是类中的成员方法,这是传统oop语言的描述,然而在javascript中,虽没有类的概念,但是它往往是通过构造函数和原型对象来给对象模拟与类相似的功能,但是这些相似的功能并不一定表现的与类完全一致...越来越像后端语言,Es6,Es7新增的诸多方法也越来越强大,但是我觉得理解构造函数与原型对象还是有必要的,是js面向对象编程的基础,今天就我的学习和使用跟大家分享一下学习心得,初学者学习笔记心得,欢迎路过的老师多提意见和指正...从上结果中可以得出:当构造函数自定义的属性名与该构造函数下原型属性名相同时,构造函数的自定义属性优先于原型属性(可以把构造函数理解为内联样式),而原型属性或者原型方法可以看做是class) 小结:构造函数就是用...每一个函数都具有prototype属性,它定义了构造函数所有对象共享属性 自定义的属性和方法放在构造函数里面 凡是共享的属性和方法挂载在该构造函数原型下面 javascript的查找变量的机制,是沿着作用域链逐级向上查找的...,构造函数首字母大写用来区分普通函数还是构造函数,构造函数中的this指向该实例化的构造函数,主要是创建多个共享特定属性和行为的对象,用于创建模板,作为饼干工具,而原型对象主要是改写构造函数(对象)下面的方法和属性

    1.2K40

    第二节单利、工厂、构造函数、原型链、call、bind、apply、sort

    ------------------------------------------- 构造函数基础 构造函数的目的就是为了创建一个自定义类,并且创建这个类的实例 上课举例构造函数: function...p1 =new Createperson('hong', 18); p1.writejs(); var p2 =new Createperson(ming, 18); p2.writejs(); 构造函数和工厂模式的区别...中所有的实例都是对象数据类型的 2、在构造函数中this.xxx=xxx出现的this指的是当前类的实例 3、p1和p2都是createperson这个类的实例,都拥有wirteJs这个方法,但是不同实例之间的方法是不一样的...------------------------------- 构造函数模式中拥有了类和实例的概念,并且实例和实例之间是相互独立开的,我们称为实例识别 基于构造函数模式的原型模式解决了属性或者方法公有的问题...: 1、每一个函数数据类型(普通函数、类)都有一个天生自带的属性:prototype(原型) 属性值是对象数据类型的值 2、在prototype上,浏览器天生给它加了一个属性,constructor(构造函数

    1.2K20
    领券