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

JS高级——构造函数原型

概述 在典型OOP语言中(如Java),都存在类概念,类就是对象模板,对象就是类实例,但在ES6之前,JS中并没有引入类概念。...在JS中,使用构造函数要注意以下两点: 构造函数用于创建某一类对象,其首字母要大写。 构造函数要和new一起使用才有意义。...构造函数原型prototype 构造函数通过原型分配函数是所有对象所共享。...一般情况下,对象方法都在构造函数原型对象中设置,如果有多个对象方法,我们可以给原型对象采取对象形式赋值,但是这样就会覆盖构造函数原型对象原来内容,这样修改后原型对象 constructor 就不再指向当前构造函数了...一般情况下,对象方法都在构造函数原型对象中设置,通过构造函数无法继承父类方法。

1.4K10

JS高级」构造函数原型

__proto__ 指向构造函数 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象属性和方法,就是因为对象有 __proto__ 原型存在。...constructor 主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来构造函数。 一般情况下,对象方法都在构造函数原型对象中设置。...如果有多个对象方法,我们可以给原型对象采取对象形式赋值,但是这样就会覆盖构造函数原型对象原来内容,这样修改后原型对象 constructor 就不再指向当前构造函数了。...每一个实例对象又有一个__proto__属性,指向构造函数原型对象,构造函数原型对象也是一个对象,也有__proto__属性,这样一层一层往上找就形成了原型链。...1.8构造函数实例和原型对象三角关系 构造函数prototype属性指向了构造函数原型对象; 实例对象是由构造函数创建,实例对象__proto__属性指向了构造函数原型对象; 构造函数原型对象

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

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

原型 概念 在构造函数创建时候,系统默认帮构造函数创建并关联一个对象 这个对象就是原型 作用 在原型所有属性和方法,都可以被和其关联构造函数创建出来所有的对象共享 访问原型 构造函数名...,是js内部使用寻找原型属性,通过该属性可以允许实例对象直接访问到原型 3. constructor 含义:原型对象constructor 指向其构造函数,如果替换了原型对象之后,这个constructor...image 原型链 ? image 构造函数以及js原生Object对象之间原型关系 ? image 原型注意事项 当对象在访问属性和方法时候,会现在自身查找,如果没有才回去原型中找。...(一级一级传递 形成了原型链) 替换原型对象时候,替换之前构造函数创建对象A和替换之后创建对象B,A和B原型是不一致。...js通过构造函数以及原型链来实现继承。

1.5K20

JS高级原型以及函数调用方式

JavaScript 高级 目标 原型 ==函数原型链== 函数和对象原型链关系 函数4种调用方式 箭头函数 2.原型 prototype -重点 原型上存放函数 解决了同一个 say 浪费 内存问题...原型本质是一个对象,理解为 JavaScript 自动帮我们添加,只要是构造函数,系统会默认为构造函数关联一个对象,这个对象就称为构造函数原型,写在原型成员,可以被构造函数所创建实例调用 原型是...,我们要使用时候,都只会使用 构造函数prototype 实例 _proto_ 只是为了方便我们开发时候查看数据,是不会手动修改和操作它。...4.原型关系 构造函数、实例、原型三者之间关系 构造函数:构造函数就是一个函数,配合new可以新建对象。 实例:通过构造函数实例化出来对象我们把它叫做构造函数实例。...一个构造函数可以有很多实例。 原型:每一个构造函数都有一个属性prototype,函数prototype属性值就是原型。通过构造函数创建出来实例能够直接使用原型属性和方法。

8510

JS原型原型

原型时候,我们应该先要记住以下几个要点,这几个要点是理解原型关键: 1、所有的引用类型(数组、函数、对象)可以自由扩展属性(除null以外)。...2、所有的引用类型都有一个’_ proto _'属性(也叫隐式原型,它是一个普通对象)。 3、所有的函数都有一个’prototype’属性(这也叫显式原型,它也是一个普通对象)。...而通过原型来实现的话,只需要在构造函数里面给属性赋值,而把方法写在Foo.prototype属性(这个属性是唯一)里面。...下面这段话可以帮助理解原型链 根据要点5,当试图得到一个对象属性时,如果这个对象本身不存在这个属性,那么就会去它构造函数’prototype’属性中去寻找。...另外,在使用原型时候,一般推荐将需要扩展方法写在构造函数prototype属性中,避免写在_ proto _属性里面。

1.8K21

JS原型原型

原型 JavaScript规定,每一个函数都有一个prototype对象属性,指向另一个对象。prototype对象属性所有属性和方法都会被构造函数实例继承。...js在创建对象时候,都有一个叫做proto属性,用于指向它函数对象原型对象prototype。 prototype可以让所有的对象实例共享它包含属性和方法。..._proto_ _proto_是原型链查询中实际用到,指向构造函数原型对象,他是对象独有的。对象._proto_ = 构造函数.prototype。 在js中,万物皆是对象,函数也是对象。...所以构造函数也会有_proto_属性。 constructor 每个函数都有一个原型对象,该原型对象有一个constructor属性,指向创建对象函数本身。...3、构造函数prototype指向原型对象,原型对象constructor指向构造函数。 使用 prototype最主要用法就是将属性暴露成公用

1.5K10

js原型原型

​一、原型 1、prototype和constructor 在js中每个函数(非箭头函数,一般关于原型有关知识我们都只考虑构造函数)都会拥有一个 prototype 属性,该属性值是一个对象...原型对象上默认会有 constructor 属性,指向该构造函数。创建原型主要目的是为了对象实例共享属性和方法。...2、__proto__ 每次调用构造函数创造一个新实例,这个实例内部 [[Prototype]] 指针就会被赋值为构造函数原型对象。...__proto__) // true 二、原型原型链:《JavaScript高级程序设计》中描述是:每个构造函数都有一个原型对象,如果该原型是另一个类型实例呢?...那就意味着这个原型本身有一个内部指针指向另一个原型,相应地另一个原型也有一个指针指向另一个构造函数。这样就在实例和原型之间构造了一条原型链。这就是原型基本构想。

1.1K00

JS原型原型

值得注意是typeof (null)会返回Object,这是因为JS二进制前三位都为0的话会被判断为Object类型,null二进制表示是全0,自然前三位也是0,所以执行typeof时会返回Object..."; console.log(stu.name) // Ming prototype 每个函数对象都会有一个prototype属性,prototype就是调用构造函数所创建那个实例对象原型,prototype...,它总是指向prototype,就是指向构造函数Student原型对象prototype。...constructor属性指向关联构造函数Student,实例constructor指向构造函数Student function Student() {} var stu = new Student...原型链可以简单理解为将原型连成一条链,js每一次获取对象中属性都是一次查询过程,如果在自有属性中找不到就会去原型对象中查找,如果原型对象中还查不到,就回去原型对象原型中查找,也就是按照原型链查找,

1.7K50

js原型原型

(null除外)在创建时候就会与之关联另一个对象,这个对象就是我们所说原型对象prototype ,每一个对象都会从原型对象上"继承"属性。...原型原型链 一张图搞懂: 函数与 Function 关系 函数就是 Function 实例....即 Function 就是函数构造函数,实例对象有一个继承 constructor 属性, 该方法指向就是构造函数 自己定义一个函数( 任意函数 ), 可以知道函数 constructor 就是...Object可以使用__proto__来访问对象原型对象,即Object可通过__proto__访问FunctionFunction.prototype 原型继承整个关系( 原型链 ) 可以知道所有的对象都有原型...__proto__ === Object.prototype); // true 应用 继承 看我这篇文章:js实现继承 增删查改 function Person() { } // 增 Person.prototype.name

2.1K10

js对象和原型原型关系

JS原型原型链一直是比较难理解内容,不少初学者甚至有一定经验老鸟都不一定能完全说清楚,更多"很可能"是一知半解,而这部分内容又是JS核心内容,想要技术进阶的话肯定不能对这个概念一知半解,碰到问题靠...prototype属性JS通过new来生成对象,但是仅靠构造函数,每次生成对象都不一样。...有时候需要在两个对象之间共享属性,由于JS在设计之初没有类概念,所以JS使用函数prototype来处理这部分需要被共享属性,通过函数prototype来模拟类:当创建一个函数时,JS会自动为函数添加...不要再使用__proto__:本段摘自阮一峰-ES6入门,具体解析请点击链接查看__proto__属性没有写入 ES6 正文,而是写入了附录。...写操作)、Object.create(target)(生成操作)代替构造函数是什么、它做了什么出自《你不知道js》:在js中, 实际上并不存在所谓'构造函数',只有对于函数'构造调用'。

1.5K20

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

这是我参与「掘金日新计划 · 6 月更文挑战」第15天,点击查看活动详情 ---- 先从面向对象讲起,本瓜认为:面向对象编程,它最大能力就是:复用! 咱常说,面向对象三大特点,封装、继承、多态。...因为这门语言设计就是这样,我们之前也提过:JavaScript语言设计主要受到了Self(一种基于原型编程语言)和 Scheme(一门函数式编程语言)影响; 它复用能力就是来自原型!...,但是它也有它问题,也是使用构造函数模式自定义类型问题, 即:必须在构造函数中定义方法(在原型上定义方法,子类是访问不到),函数不能重用。...思路是:使用原型链继承原型属性和方法,而通过构造函数继承实例属性。...说实话,JS 继承真的很奇怪。。。并不是面向对象语言,又要通过原型链去模拟面向对象,真的很多小坑点需要去注意。

1.2K20

JS进阶:原型原型

JS进阶:原型原型链 image.png JavaScript中除了基础数据类型外都是对象(引用类型)。...这里就需要用到原型(prototype): 每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它构造函数原型对象(prototype )。...原型对象默认拥有一个constructor属性,指向指向它那个构造函数(也就是说构造函数原型对象是互相指向关系)。...所有原型终点都是Object函数prototype属性,因为在JavaScript中对象都默认由Object()构造。...然后用Dog函数创建了一个实例作为Husky原型对象赋值给Husky.prototype以继承方法。这样,通过Husky函数创建实例就拥有了Dog中属性和方法。

1.4K30

JS面试必问-JS原型原型

为什么需要原型js中万物皆对象,对象可以说是重中之重了。每一个对象都拥有自己属性。但是在这个世界中有很多东西都是相似的,可以归为一类,他们有共同方法和属性。不可能让每一个对象都定义一个属性吧。...所以,在js中怎么才能让多个对象共享一个或多个方法呢?原型出现就是为了解决这个问题。...我们上面讲过,js每一次获取对象中属性都是一次查询过程,如果在自有属性中找不到就会去原型对象中查找,如果原型对象中还查不到,就回去原型对象原型中查找,也就是按照原型链查找,直到查找到原型顶端,也就是...在js中,对象都有__proto__属性,一般这个是被称为隐式原型,该隐式原型指向构造该对象构造函数原型。...而所有的函数都是构造函数Function实例。从原型链机制角度来说,那就是说所有的函数都能通过原型链找到创建他们Function构造函数构造原型Function.protorype对象。

1.6K20

js原型原型链解析

js原型原型链 这几天闲了看了下js原型,以下内容为个人理解,如有错误,尽请指正。...首先,明确一点:js对象分为普通对象和函数对象,一般我们自定义可以被new函数称作函数对象,另外js内置了譬如:Array、Date、Object、Function、Number、String、...1、只有函数对象才有prototype属性,该属性指向俗称“原型”或者“原型对象”,举个栗子: function Person() {} console.log(Person.prototype)...,该属性指向该函数构造,这里指向Person自身,即: Person.prototype.constructor === Person // true 3、所有对象,不论普通对象还是函数对象都有一个...__proto__ === p.constructor.prototype) // true 下一节的话讲下js继承~

2K30

js原型入门

前言 本文主要是根据《head first javascript程序设计》摘抄学习而成,学习采用这本书主要是一位阿里大佬建议,经过近期学习阅读,发现确实比其他js书籍能更好理解和使用js相关知识...对象图 为了更好地理解对象结构,我们可以向后端学习,做出对象图,它基本是分为三栏一个矩形图,第一栏是构造函数名称,第二栏是对象具有的属性,第三栏是对象具有的方法。 ?...构造函数效率 一般情况下,我们是使用构造函数进行一些类定义,在构造函数中你会定义一些这个对象需要用到属性或者方法。比如下面的Dog代码。...在上述代码执行后,虽然代码层面,各个实例对象属性以及方法都指定到了新对象中,但细节发现,其属性是各自不同,可以理解,但是其方法也会都有一个函数指向,这部分是重复。...之所以出现这样问题,是因为我们没有充分利用好js对象模型,其是基于原型概念原型是什么 js可以从其他对象那里继承属性和行为,更具体js使用原型继承。其中其行为继承对象称为原型对象。

1.4K11

JS 原型

JS 原型链 1. 原型原型基础结论 1.1 函数与对象关系 函数是对象,对象都是通过函数创建函数与对象并不是简单包含与被包含关系。...1.2 原型类别 显示原型:prototype,是每个函数function独有的属性。 隐式原型: __proto__,是每个对象都具有的属性。...1.3 原型原型原型:一个函数可以看成一个类,原型是所有类都有的一个属性,原型作用就是给这个类一个对象都添加一个统一方法。...经典原型原型分析 「接下来我们将主要讲解以下类别:」 image-20220110144233519 2.1 函数.prototype **前提结论:**函数都是对象,每个函数都自带一个属性叫做...被构造函数创建实例对象 [[Prototype]] 指向 func prototype 属性。「Object.prototype」 属性表示 Object 原型对象。

2.3K30

js原型

显示原型 1.每一个构造函数都有一个prototype属性,默认指向一个空Object对象(原型对象) function fun(){ } console.log(fun.prototype ) //{...) //true 5.构造函数与它原型对象有一个相互引用关系 6.原型对象上添加方法用于实例对象上使用 隐式原型 每一个实例对象都有一个__proto__属性,称之为隐式原型 对象隐式原型值为其对应构造函数显示原型值...当执行 fn.test1()时先对象自身查找发现有,直接调用test1() 当执行fn.test2()时,自身对象上没有test2,接下来看构造函数原型对象上是否有test2,发现有直接调用test2...当执行fn.toString(),时,自身对象没有,接下来查找它构造函数原型对象上是否有toString(),发现没有,接下来又继续沿着Fn原型对象构造函数原型对象上查找找到toString()...当执行fn.test3()时,查找自身对象没有,它直接构造函数对象原型对象上也没有,接下来沿着Fn原型对象构造函数原型对象构造函数原型对象上查找,这里已经找到原型尽头,Object原型对象

2.1K20

说说JS原型对象和原型

理解原型对象(有些文章简称为原型)和原型链,是理解JS重要一环。下面是笔者对JS原型理解, 函数对象 俗话说,JS中万物皆对象。函数也是一个对象,只不过函数是在特定环境中执行代码对象。...什么是函数对象?每声明一个函数,此函数JS执行解释时都会被当作一个对象来维护,这就是函数对象。...JS中声明函数方式有: function fn1(){} var fn2 = function(){} var fn3 = new Function() 所以可以理解为fn1、fn2、fn3都是函数对象...JS中还包括一些系统内置函数对象,比如: Function Object Array String Number RegExp 函数对象之外对象都是普通对象。...理解原型对象(其实就一普通对象) 1、只有函数对象才拥有原型对象 也即无论什么时候以什么方式创建一个函数函数对象),都会根据特定规则为该函数创建一个prototype属性(原型对象地址引用),这个属性就是指向该函数原型对象

8010
领券