首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS高级——构造函数原型

概述 在典型的OOP的语言中(如Java),都存在类的概念,类就是对象的模板,对象就是类的实例,但在ES6之前,JS中并没有引入类的概念。...在JS中,使用构造函数要注意以下两点: 构造函数用于创建某一类对象,其首字母要大写。 构造函数要和new一起使用才有意义。...共享方法 对象原型 proto 对象都会有一个属性 __proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性方法,就是因为对象有 __...proto__原型的存在 __proto__对象原型原型对象 prototype是等阶的。...constructor 构造函数 对象原型(__proto__)构造函数(prototype)原型对象里面都有一个属性 constructor属性,constructor我们称为构造函数,因为它指回构造函数本身

1.4K10

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__ 原型的存在。...prototype身上去查找sing这个方法 1.6constructor构造函数 对象原型( __proto__)构造函数(prototype)原型对象里面都有一个属性 constructor 属性...1.8构造函数实例原型对象三角关系 构造函数的prototype属性指向了构造函数原型对象; 实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象; 构造函数的原型对象的

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

“工厂、构造原型” 设计模式JS 继承

这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情 序言 我们在前一篇文章《JS精粹,原型链继承构造函数继承的 “毛病”》 ,提到了:原型链继承、构造函数继承、组合继承; 在另一篇文章...《蓦然回首,“工厂、构造原型”设计模式,正在灯火阑珊处》,提到了:我们用于创建对象的三种设计模式:工厂设计模式构造设计模式原型设计模式; 至此,我们可以明显的感受到:JS 要实现面向对象(继承的能力...),离不开这 3 种设计模式原型链 + 构造函数 = 组合继承 本篇带来一个新的继承方式:寄生继承,它由工厂模式构造函数模式组成,即 工厂+构造函数 = 寄生继承 正文 正是由于:原型链继承构造函数继承的...寄生式组合继承可以算是【引用类型】继承的最佳模式 os:不过这里的增强写法,理解起来真是怪,为什么父类的显示原型构造函数等于子类?...:工厂、构造原型设计模式原型链 + 构造函数 = 组合继承 工厂+构造函数 = 寄生继承; 组合继承寄生继承是最常用的两种继承方式。

1K30

JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】上篇

使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)行为(方法),此时会产生很多重复的代码,把这些重复性的特征属性抽象出来,做成构造函数,可以实现代码复用。...这里边这个机器就相当于构造函数,可以反复使用生产一些自带属性特征的初始对象。...实例成员和静态成员 实例成员: 实例属性实例方法(原型方法)的统称 静态成员: 静态属性和静态方法的统称 静态方法:即构造函数.方法,例如,Math.random()、Number.parseInt(...由于JS中所有对象都是通过new产生的,因此,严格来说,JS中所有对象都称之为实例 //例: const obj = { a:'0', b:'1', c:'2' } //上面等价于var obj =...={ a:'hello', b:66, } Object.setPrototypeOf(obj1,null); console.log(obj1); 总结 js构造函数到原型原型链的部分对初学者比较抽象

69420

JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】下篇

文章目录 ✔️前言 内容 继承 伪经典模式/圣杯模式 类语法 总结 ✔️前言 ❗️ ❗️ ❗️本篇系将带来JavaScript中的构造——原型——原型链——继承——ES6类语法系列知识完整讲解。...❗️ ❗️ ❗️ ❕上篇涉及:构造——原型——原型链 ❕下篇涉及:继承——ES6类语法 内容 继承 初认识 此处我们就以通常在各种平台所见到的会员与非会员举例: 普通会员 属性:用户名、密码 方法:...this.loginId = loginId; this.loginPwd = loginPwd; 这段代码User构造函数并没有区别,可以想象得到,将来也不会有区别,即:普通用户该有的属性,VIP...这继承的联系 继承是面向对象的概念,它描述了两个对象类型(类,构造函数)之间的关系 如果在逻辑上可以描述为:A不一定是B,但B一定是A,则:B继承A、A派生B、A是B的父类、B是A的子类。...(伪经典模式),但是这种模式也会存在一个缺陷,其缺陷就是属性在实例化对象上面会有一份,在原型对象上面也会有一份,从而造成内存的浪费。

65810

构造函数原型

1.概述: 在典型的OOP的语言中(如Java) , 都存在类的概念,类就是对象的模板,对象就是类的实例,但在ES6之前, JS中并没用引入类的概念。...静态成员实例成员 JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this.上添 加。通过这两种方式添加的成员,就分别称为静态成员实例成员。...5.对象原型 对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性方法, 就是因为对象有 __proto...__proto__ === Star.prototype); //true 6.constructor构造函数 对象原型( __proto__)构造函数(prototype)原型对象里面都有一个属性...构造函数实例原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的

45250

构造函数原型

1.构造函数原型 1.1对象的三种创建方式--复习 字面量方式 var obj = {}; new关键字 var obj = new Object(); 构造函数方式...对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性方法,就是因为对象有 __proto__ 原型的存在...1.8构造函数实例原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的...1.9原型成员的查找机制 任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象就有proto属性,这样一层一层往上找,就形成了一条链,我们称此为原型链; 当访问一个对象的属性...this指向 构造函数中的this原型对象的this,都指向我们new出来的实例对象 function Star(uname, age) { this.uname = uname; this.age

33110

构造对象,原型原型链笔记

面向对象:面向对象、原型原型原型链、 Function、Object 的理解 什么是 JS 原型链?...prototype属性 执行 Person 函数,执行过程中对 this 操作就是对 tmpObj 进行操作 函数执行完后返回刚刚创建的 tmpObj 把 tmpObj 赋值给 p (p也指向同一个对象) 4、构造函数的原型链...1、对函数使用new表达式就是构造函数 2、每个函数都有名称为prototype属性,叫做原型,是一个对象 3、每个对象都有一个内部属性 _proto_(规范中没有指定这个名称,但是浏览器都这么实现的...obj12还是this代表的对象。如果return是对象,那构造的对象就等于return后面的对象。 ? //obj1={a:1,b:2} obj2={a:1,b:2} ?...三、原型原型链 1、查找数组valueof方法,讲原型链 所有数组都是由Array这个函数构建的。数组的所有方法都是Array.prototype或者他们的原型链上面的。

45820

JS 原型模式

简介 原型模式(Prototype pattern),用原型实例指向创建对象的类,使用于创建新的对象的类的共享原型的属性与方法。 2....原型对象本身就是有效地利用了每个构造器创建的对象,例如,如果一个构造函数的原型包含了一个name属性(见后面的例子),那通过这个构造函数创建的对象都会有这个属性。...总结 原型模式在JavaScript里的使用简直是无处不在,其它很多模式有很多也是基于prototype的,这里大家要注意的依然是浅拷贝深拷贝的问题,免得出现引用问题。...---- 本文是系列文章,可以相互参考印证,共同进步~ JS 抽象工厂模式 JS 工厂模式 JS 建造者模式 JS 原型模式 JS 单例模式 JS 回调模式 JS 外观模式 JS 适配器模式 JS 利用高阶函数实现函数缓存...(备忘模式) JS 状态模式 JS 桥接模式 JS 观察者模式 网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~ 参考: 设计模式原型模式 《Javascript

1.4K10

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

构造函数继承 构造函数继承,也叫做:“盗用构造函数”,“对象伪装”或“经典继承”。 基本思路:在子类构造函数中用 apply() call()方法调用父类构造函数。...,但是它也有它的问题,也是使用构造函数模式自定义类型的问题, 即:必须在构造函数中定义方法(在原型上定义方法,子类是访问不到的),函数不能重用。...构造函数继承:子类不能访问父类原型上的方法。 咱就是说,这东西怎么这么拧巴呢。。。 于是乎一个规避二者“毛病”的继承方式出现了:组合继承~~ 组合继承 目前最流行的继承模式是组合继承!...思路是:使用原型链继承原型上的属性方法,而通过构造函数继承实例属性。...说实话,JS 继承真的很奇怪。。。并不是面向对象语言,又要通过原型链去模拟面向对象,真的很多小坑的点需要去注意。

1.2K20

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

实际上,js在使用构造函数模式创建对象的过程中有以下的几个步骤: 创建一个新对象 将对象的作用域赋给新对象 调用构造函数中的代码为属性方法赋值 返回新对象 其中,我们发现js帮我们封装了1,2,4等步骤...由此,我们就引出了下一种的方法,原型模式 原型模式 原型对象简而言之,就是每个构造函数创建的对象都有一个指针,这个指针指向它的原形对象,而原形对象也普通对象一样具有属性方法,但不同的事,原形对象的属性方法是让所有实例共享的...但原型模式,显然存在一个问题就是,并不是所有东西都是共享的,所以实际中,我们常常将原型模式与工厂模式或者构造函数模式结合起来。联合使用。对于那些需要共享的属性方法,我们就把它加入到原型对象中。...** 需要注意的是,如果实例对象原型对象中的存在相同的属性方法,那么js会先从实例中搜寻,如果找到了就忽略原型对象中的,如果在实例中没有找到,就继续到原型中寻找 ** 混合使用构造函数模式原型模式...中主要用于创建对象的几种方法,工厂模式构造函数模式原型模式构造函数模式原型模式的组合使用。

1.3K30

JS设计模式原型模式

意图 用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 ——《设计模式:可复用面向对象软件的基础》中文版第89页 所以这里说的原型类似于对象的蓝图。...但是,由于JS的灵活性,这个设计模式对于JS来说不是很重要。 因为在像C++这样的静态语言中,类不是对象,并且运行时只能得到很少或者得不到任何类型信息,所以Prototype(原型模式)特别有用。...——《设计模式:可复用面向对象软件的基础》中文版第92页 所以这里只做一个学习,我们只需要知道这个设计模式对于JS来说不是很重要即可。...draw(factory1) // Drawing a reactangle, size: 3x5 draw(factory2) // Drawing a circle, radius: 5 在JS...注意到,这里也使用了工厂模式:这个工厂以传入的对象为原型创建新的对象。 参考 设计模式:可复用面向对象软件的基础

40420

详解js原型构造函数以及class之间的原型关系

原型 概念 在构造函数创建的时候,系统默认的帮构造函数创建并关联一个对象 这个对象就是原型 作用 在原型中的所有属性方法,都可以被其关联的构造函数创建出来的所有的对象共享 访问原型 构造函数名...image 原型链 ? image 构造函数以及js原生Object对象之间的原型关系 ? image 原型的注意事项 当对象在访问属性方法的时候,会现在自身查找,如果没有才回去原型中找。...(一级一级传递 形成了原型链) 替换原型对象的时候,替换之前构造函数创建的对象A替换之后创建的对象B,AB的原型是不一致的。...js通过构造函数以及原型链来实现继承。...(声明属性以及静态方法,这种类创建属性创建方法参照上面动态原型模式构造函数。

1.5K20

秒懂JS对象、构造器函数原型对象之间的关系

学习JS的过程中,想要掌握面向对象的程序设计风格,对象模型(原型继承)是其中的重点难点,拜读了各类经典书籍各位前辈的技术文章,感觉都太过高深,花费了不少时间才搞明白(个人智商是硬伤/(ㄒoㄒ)/~...一、基本概念   1、对象:属性方法的集合,即变量函数的封装。每个对象都有一个__proto__属性,指向这个对象的构造函数的原型对象。   ...3、原型对象:每个函数都有一个prototype属性,它是一个指向原型对象的指针(原型对象在定义函数时同时被创建) 二、创建对象的方法   1、使用构造函数原型对象共同创建 ?...通过构造函数创建实例对象p1p2的时候,其中name、age、job这些是通过构造函数生成的(本地部分),sayName方法是通过继承原型对象来实现共享的(远程部分),这样多个实例对象都是由本地(私有...如上图,使用Object.create方法从原型对象直接生成新的实例对象,新对象p1继承原型对象的属性方法,但是这里没有用到构造函数 var person={ classname:'human'}/

1.7K70

第186天:js深入理解构造函数原型对象

但在js中不存在类的概念,js不是基于类,而是通过构造函数(constructor)原型链(propotype chains)实现的。...: 所有的实例对象都可以继承构造器函数中的属性方法。...所以,缺点就是:同一个构造函数的对象实例之间无法共享属性方法。   为了解决构造函数的这个缺点,js提供了prototype属相来解决该问题。   ...propotype属性的作用   js中每个数据类型都是对象,除了null undefined,而每个对象都是继承自一个原型对象,只有null除外,它没有自己的原型对象,最终的Object的原型为null...3.了解了构造器,我们来看下原型prototype   JS中万物都是对象,但是对象也分为:普通对象函数对象,也就是Object Function.   那么怎么区分普通对象函数对象呢?

68220

JS中的原型原型

原型 JavaScript规定,每一个函数都有一个prototype对象属性,指向另一个对象。prototype对象属性的所有属性方法都会被构造函数的实例继承。...这意味着我们可以把那些公用的属性方法,直接定义在prototype对象属性上。 prototype就是调用构造函数所创建的实例对象的原型(proto)。...js在创建对象的时候,都有一个叫做proto的属性,用于指向它的函数对象的原型对象prototype。 prototype可以让所有的对象实例共享它包含的属性方法。..._proto_ _proto_是原型链查询中实际用到的,指向构造函数的原型对象,他是对象独有的。对象._proto_ = 构造函数.prototype。 在js中,万物皆是对象,函数也是对象。..._proto_ = 构造函数.prototype。 3、构造函数的prototype指向原型对象,原型对象的constructor指向构造函数。

1.5K10

JS中的原型原型

---- 那么要点说完了,我们就根据这些要点来理解原型原型链。 原型 我们先来看一个原型的例子。...而通过原型来实现的话,只需要在构造函数里面给属性赋值,而把方法写在Foo.prototype属性(这个属性是唯一的)里面。...下面这段话可以帮助理解原型链 根据要点5,当试图得到一个对象的属性时,如果这个对象本身不存在这个属性,那么就会去它构造函数的’prototype’属性中去寻找。...所以当fn调用toString()时,JS发现fn中没有这个方法,于是它就去Foo.prototype中去找,发现还是没有这个方法,然后就去Object.prototype中去找,找到了,就调用Object.prototype...另外,在使用原型的时候,一般推荐将需要扩展的方法写在构造函数的prototype属性中,避免写在_ proto _属性里面。

1.8K21

js中的原型原型

​一、原型 1、prototypeconstructor 在js中每个函数(非箭头函数,一般关于原型的有关知识我们都只考虑构造函数)都会拥有一个 prototype 属性,该属性值是一个对象...原型对象上默认会有 constructor 属性,指向该构造函数。创建原型的主要目的是为了对象实例共享属性方法。...、如果在创建一个 实例对象同样可以继承该构造函数原型上的属性方法,实现了数据共享。...那就意味着这个原型本身有一个内部指针指向另一个原型,相应地另一个原型也有一个指针指向另一个构造函数。这样就在实例原型之间构造了一条原型链。这就是原型链的基本构想。...:所有构造函数其实里面都有 prototype __proto__ 这两个属性,所以 Object Function 就是一个构造函数(我的理解)可能不严谨但是对于我们理解这里面的指向问题会很有帮助

1.1K00
领券