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

说说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 函数对象之外的对象都是普通对象。...看到没有,原型对象并不神秘,就是一个普通的对象,只不过其默认有了constructor和__proto__(下一节会讲)属性而已(其中__proto__不建议在实际中应用,因为在有些浏览器可能并没有实现该属性

9210

深度剖析前端JavaScript中的原型(JS的对象原型)

这张图片有点劝退了,哈哈哈~ 通过原型机制,JavaScript 中的对象从其他对象继承功能特性;这种继承机制与经典的面向对象编程语言的继承机制不同。...原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。...注意:必须重申,原型链中的方法和属性没有被复制到其他对象——它们被访问需要通过前面所说的“原型链”的方式。...注意:没有官方的方法用于直接访问一个对象的原型对象——原型链中的“连接”被定义在一个内部属性中,在 JavaScript 语言标准中用 [[prototype]] 表示(参见 ECMAScript)。...JavaScript 中到处都是通过原型链继承的例子。比如,你可以尝试从 String、Date、Number 和 Array 全局对象的原型中寻找方法和属性。

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

    JS中的面向对象、原型、原型链、继承总结大全

    补充: js中说一切都是对象,是不完全的,在js中6种数据类型(Undefined,Null,Number,Boolean,String,Object)中,前五种是基本数据类型,是原始值类型,这些值是在底层实现的...Person.prototype.constructor = Person; 原型模式就是不必在构造函数中定义实例的属性和方法,而是将属性和方法都添加到原型对象中。...、Firefox、Safari等浏览器中在每个对象身上支持一个__proto__属性,指向的就是构造函数的原型对象。...都指向了Person.prototype中的showName 这种构造函数模式和原型模式组合使用,基本上可以说是js中面向对象开发的一种默认模式,介绍了以上这几种常用创建对象的方式, 还有其他不常用的模式就不介绍了...属性查找机制 js中实例属性的查找,是按照原型链进行查找,先找实例本身有没有这个属性,如果没有就去查找查找实例的原型对象,也就是[[prototype]]属性指向的原型对象,一直查到Object.prototype

    1.4K22

    js对象和原型、原型链的关系

    JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个概念一知半解,碰到问题靠...写操作)、Object.create(target)(生成操作)代替构造函数是什么、它做了什么出自《你不知道的js》:在js中, 实际上并不存在所谓的'构造函数',只有对于函数的'构造调用'。...如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。我们称这个新对象为构造函数的实例。...foo1.obkoro1和foo1.koro:返回undefined静态属性: foo.obkoro1、foo.koro函数在JS中是一等公民,它也是一个对象, 用来模拟类。...原型对象改变,原型链下游获取的值也会改变上面那个例子中的foo1.test的值是什么?

    1.5K20

    JS中的原型和原型链

    js在创建对象的时候,都有一个叫做proto的属性,用于指向它的函数对象的原型对象prototype。 prototype可以让所有的对象实例共享它包含的属性和方法。...原型链 每一个对象都可以有一个原型,这可原型还可以有它自己的原型,以此类推,就形成了原型链。...查找一个对象的属性或方法的时候,如果这个对象中没有这个属性或者方法,那就会在这个对象的原型对象中去找,以此类推,直到原型链结束。..._proto_ _proto_是原型链查询中实际用到的,指向构造函数的原型对象,他是对象独有的。对象._proto_ = 构造函数.prototype。 在js中,万物皆是对象,函数也是对象。...3、构造函数的prototype指向原型对象,原型对象的constructor指向构造函数。 使用 prototype最主要的用法就是将属性暴露成公用的。

    1.5K10

    js中的原型和原型链

    ​一、原型 1、prototype和constructor 在js中每个函数(非箭头函数,一般关于原型的有关知识我们都只考虑构造函数)都会拥有一个 prototype 属性,该属性值是一个对象...__proto__) // true 二、原型链 原型链:《JavaScript高级程序设计》中的描述是:每个构造函数都有一个原型对象,如果该原型是另一个类型的实例呢?...原型链中的查找机制:实例对象上找不到指定属性,就从该原型对象上找,如果还是找不到就到该原型对象上的原型上去找,。...语句上,它还会影响到所有继承来自该 [[Prototype]] 的对象,如果你关心性能,你就不应该在一个对象中修改它的 [[Prototype]]。...,使用现有的对象来作为新创建对象的原型(prototype),返回一个带着指定原型对象的新对象。

    1.1K00

    【前端基础进阶】JS原型、原型链、对象详解

    普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的。分为普通对象和函数对象,Object 、Function 是 JS 自带的函数对象。...原型对象 在 JavaScript 中,每当定义一个对象(函数也是对象)时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象。...__proto__的属性;2.每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法...,那么就是一个对象(JS中函数同样是对象),所以prototype同样带有__proto__属性); 3.每个对象的__proto__属性指向自身构造函数的prototype; 4.每个对象都有 、...原型链 五、原型链 原型对象其实也是普通的对象。几乎所有的对象都可能是原型对象,也可能是实例对象,而且还可以同时是原型对象与实例对象。这样的一个对象,正是构成原型链的一个节点。

    78130

    js对象和原型、原型链的关系_2023-03-02

    JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个概念一知半解,碰到问题靠...写操作)、Object.create(target)(生成操作)代替 构造函数是什么、它做了什么 出自《你不知道的js》:在js中, 实际上并不存在所谓的'构造函数',只有对于函数的'构造调用'。...如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。 我们称这个新对象为构造函数的实例。...foo1.obkoro1和foo1.koro:返回undefined 静态属性: foo.obkoro1、foo.koro 函数在JS中是一等公民,它也是一个对象, 用来模拟类。...原型对象改变,原型链下游获取的值也会改变 上面那个例子中的foo1.test的值是什么?

    57120

    浅谈与使用js中的原型

    浅谈与使用js中的原型# 1 什么是原型# “ 每个函数都会创建一个 prototype 属性,这个属性是一个对象,包含应该由特定引用类型的实例 共享的属性和方法。...实际上,这个对象就是通过调用构造函数创建的对象的原型。无论何时,只要创建一个函数,就会按照特定的规则为这个函数创建一个 prototype 属性(指向 原型对象)。”...按照我现在的理解就是:每个函数上面都有一个prototype属性,这个就是原型,我们可以通过这个原型属性来完成一些比较厉害的操作。...2 原型的使用# 首先我们使用设计模式中的工厂模式来实现一个Person类,可以通过new这个Person的函数来创建一个与之具有相同属性的实例,也就省的我们再次创建Person函数了。...3 小结# 本文仅是对于原型有个简单的认识也使用,原型在js中是一个比较重要的模块,还有__proto__ 、 原型链 这些概念没有讲到,如果感兴趣,可以再通过书籍及视频来交叉理解。

    1.1K30

    js中的对象

    js中的对象 在编程语言中,提到对象,一般都含有一个隐藏的上下文面向对象编程。 面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。..., cedf:function(){console.info("cdef")}, "arr":[1,2,3], o:{"name":"jake"} } “在js中,对象是属性的无序集合...1.2 集合 集合是说 对象中可以有很多个属性。属性之间用逗号分隔。 1.3 无序 属性与属性之间,没有先后顺序之分。 对比一下,数组的元素之间有序的。...2. js中对象的分类 众观整个js中的对象,可以分成三类: 内置对象 宿主对象 自定义的对象 2.1 内置对象 “由ECMA实现、不依赖于宿主环境的对象,这些对象在js程序执行之前就已经存在了”。...js有两个运行的环境: (1) 浏览器。我们在.html文件中加入js代码,再通过浏览器来打开,这里浏览器就是javascript的运行环境。 在浏览器端的js而言,宿主对象就是浏览器对象。

    6.9K50

    JS对象 - this - 原型 - 可迭代器 - Symbol - 继承

    箭头函数的this绑定该函数定义时候所在的作用域指向的对象, call apply bind 不改变它绑定的this 因此用箭头函数来声明对象的方法时候,一定要小心里面的this陷阱,而且箭头函数不能用做构造函数...Object.prototype()获取对象的原型对象 Functions derive from Function.prototype, and arrays derive from Array.prototype...该迭代器有next函数,该函数每次返回一个对象 对象具有一个名叫Symbol.iterator的方法,就是可迭代对象.该方法要返回一个迭代器对象!...迭代器对象要有next方法 // 调用可迭代对象string的迭代器接口方法产生一个迭代器!...false} console.log(okIterator.next()); // → {value: undefined, done: true} 下面的例子是使用Symbol.iterator实现自己的可迭代对象

    1.3K00

    JS面向对象二:this原型链new原理

    JS面向对象二:this/原型链/new原理 阮一峰JavaScript教程:面向对象编程 阮一峰JavaScript教程:实例对象与 new 命令 阮一峰JavaScript教程:this 关键字 也可以看看这篇文章周大侠啊...文中: **No. 1:Object.prototype No. 2:Function.prototype** 还有这几篇文章也不错: 「每日一题」什么是 JS 原型链?...- 方应杭的文章 - 知 周大侠啊 进击的 JavaScript 之 (七) 原型链 周大侠啊 进击的 JavaScript (八) 之 继承 new() 看看这篇文章很清楚: JS 的 new 到底是干什么的...- 方应杭的文章 - 知乎 new解决了什么 以共有属性对象为模板new出来的新对象的__proto__指向共有属性对象(我把这个对象叫做模板对象,也叫作原型).这样共有属性在内存中只需要存一次!...不行,这样每次调用这个函数,都会在内存中创建这个临时对象,那么和原先的不用原型一样了 ? 解决方法是,把这个原型变为函数的一个属性 ?

    2K30

    前端学习(38)~js学习(十五):原型对象

    原型prototype的概念 认识1: 我们所创建的每一个函数,解析器都会向函数中添加一个属性 prototype。这个属性对应着一个对象,这个对象就是我们所谓的原型对象。...认识2: 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。...认识3: 使用 in 检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true。 可以使用对象的hasOwnProperty()来检查对象自身中是否含有该属性。...原型链 原型对象也是对象,所以它也有原型,当我们使用或访问一个对象的属性或方法时: 它会先在对象自身中寻找,如果有则直接使用; 如果没有则会去原型对象中寻找,如果找到则直接使用; 如果没有则去原型的原型中寻找...上面这句话,也可以这样理解:如果堆内存中的对象,没有任何变量指向它时,这个堆内存里的对象就会成为垃圾。 JS拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁。

    49810

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

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

    1.9K70

    对象、原型

    所谓“类”就是对象的模板,对象就是“类”的实例。但是,JavaScript 语言的对象体系,不是基于“类”的,而是基于构造函数(constructor)和原型链(prototype)。...使用new运算符创建对象实例这一过程分为四步: 创建一个空对象,作为将要返回的对象实例 将这个空对象的原型,指向构造函数的prototype属性 将这个空对象赋值给函数内部的this关键字 开始执行构造函数内部的代码...对它使用new命令,会得到一个空对象。这是因为new命令总是返回一个对象,要么是实例对象,要么是return语句指定的对象。本例中,return语句返回的是字符串,所以new命令就忽略了该语句。...有什么特性 我们创建的每个函数都有一个 prototype(原型)属性。使用原型的好处是可以让所有对象实例共享它所包含的属性和方法。...换句话说,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型中,如下面的例子所示。

    46840

    深入理解javascript中的原型原型的概念使用原型给对象添加方法和属性使用原型对象的属性和方法原型的陷阱小结

    也就是说,原型是函数对象的属性,不是所有对象的属性,对象经过构造函数new出来,那么这个new出来的对象的构造函数有一个属性叫原型。明确这一点很重要。...其实很好理解,javascript中对象是通过引用传递的,原型对象只有一份,不是new出一个对象就复制一份,所以我们对原型的操作和更新,会影响到所有的对象。这就是原型对象的实时性。 ?...这就是javascript中的原型陷阱。 我们很容易解决这个问题,只要在更新原型对象后面,重新指定构造函数即可。 Dog.prototype.constructor = Dog; ?...Paste_Image.png 这样所有就按正常的运行了 ** 所以我们切记在替换掉原型对象之后,切记重新设置constructor.prototype ** 小结 我们大概介绍了原型中容易混淆的问题,...对象的自身属性搜索的优先级比原型的属性要高 proto属性的神秘连接及其同prototype的区别 prototype使用中的陷阱

    4.3K30
    领券