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

1.5K10

JS原型原型

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

1.8K21

js原型原型

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

1.1K00

js原型原型

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

2K10

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对象和原型原型关系

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

1.4K20

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

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

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原型原型

既然构造函数创建对象实例原型对象都是同一个,那么构造函数和其构造出对象实例原型对象之间有联系就完美了。参考 前端面试题详细解答图片这个联系就是prototype。...在上面内容基础之上,我们来模拟一下js引擎读取对象属性:function getProperty(obj, propName) { // 在对象本身查找 if (obj.hasOwnProperty...图片七、函数对象原型链之前提到过引用类型皆对象,函数也是对象,那么函数对象原型链是怎么样呢?对象都是被构造函数创建函数对象构造函数就是Function,注意这里F是大写。...对象都是由构造函数创建,对象__proto__属性指向其原型对象,构造函数prototype属性指向其创建对象实例原型对象,所以对象__proto__属性等于创建它构造函数prototype...所有通过字面量表示法创建普通对象构造函数为Object所有原型对象都是普通对象,构造函数为Object所有函数构造函数是FunctionObject.prototype没有原型对象OK,我们根据以上六点总结来分析上图

1.1K40

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

JS里一切皆对象,对象是“无序属性集合,其属性值可以是数据或函数”。...__proto__.split; //true 每个函数只要被创建就会有一个prototype属性,它值就是原型对象(所以访问原型对象有两条途径:函数prototype、实例对象__proto_...只需要修改函数prototype指向或者实例对象__proto__指向,就可以产生原型链。...实际上,由于原型对象B是由Object()函数创建,而Object()函数prototype__proto指向是null,所以一条原型起点是实例对象,终点是null,中间由__proto__...如果在实例对象A上访问某个属性或方法,JS会从实例对象A开始沿着原型链层层查找,直到遇见null。

72920

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券