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

访问`__proto__`属性并没有得到我所期望的Javascript

__proto__属性是JavaScript中的一个内置属性,用于访问对象的原型。通过__proto__属性,我们可以访问对象的原型链,即对象继承的属性和方法。

然而,尽管__proto__属性在一些旧版本的JavaScript中被广泛使用,但它并不是标准的JavaScript属性,也不被所有的浏览器完全支持。为了保证代码的可移植性和兼容性,推荐使用Object.getPrototypeOf()方法来访问对象的原型。

Object.getPrototypeOf()方法是JavaScript中用于获取对象原型的标准方法。它接受一个对象作为参数,并返回该对象的原型。以下是使用Object.getPrototypeOf()方法来访问对象原型的示例代码:

代码语言:txt
复制
const obj = {};
const prototype = Object.getPrototypeOf(obj);
console.log(prototype);

在上述示例中,我们创建了一个空对象obj,然后使用Object.getPrototypeOf()方法获取了obj的原型,并将结果打印到控制台。

关于__proto__属性和Object.getPrototypeOf()方法的区别,可以参考以下几点:

  1. 标准化程度:__proto__属性不是官方标准的JavaScript属性,而Object.getPrototypeOf()方法是官方标准的方法,因此更推荐使用后者。
  2. 兼容性:__proto__属性在一些旧版本的JavaScript中存在兼容性问题,而Object.getPrototypeOf()方法在现代浏览器中得到广泛支持,具有更好的兼容性。
  3. 可读性和可维护性:Object.getPrototypeOf()方法的语义更加清晰明确,使代码更易读和维护。相比之下,__proto__属性的使用可能会导致代码可读性下降,因为它不够直观。

总结起来,为了避免兼容性问题并提高代码的可读性和可维护性,推荐使用Object.getPrototypeOf()方法来访问对象的原型,而不是直接访问__proto__属性。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Javascript Prototypes之旅(A Plain English Guide to JavaScript Prototypes译文)

我并不认同这种做法,这样只会令到我们更困惑。所以下面我们先学习一些基础原型吧! 2....3.The __proto__ object   我们可以通过__proto__属性来简化对Javascript原型理解。但不幸是__proto__属性并非Javascript标准接口。...The 'function prototype'   每一个Javascript函数都有一个名为prototype属性(译者语:这个prototype属性与之前说__proto__一样会指向原型,它们之间关系下面的内容会有所讲解...(译者语:这里原文代码和讲解有问题,据本人实践所得,对象并没有prototype属性,若要访问对象原型需要使用__proto__属性或Object.getPrototype函数;而要访问函数原型则要通过访问...__proto__和prototype属性关系其实很简单,prototype属性所指向原型会在使用关键字new调用构造函数时被复制到隐式创建this对象__proto__中。

66190

前端原型链污染漏洞竟可以拿下服务器shell?

“原型链污染”漏洞,看起来好高大上名字,和“互联网黑话”有得一拼,好奇心驱使下,抽丝剥茧地研究一番。...0x01 JavaScript原型链 1.1 基本概念 在javaScript中,实例对象与原型之间链接,叫做原型链。其基本思想是利用原型让一个引用类型继承另一个引用类型属性和方法。...图1.1 原型链关系图 1.2 原型链查找机制 当一个变量在调用某方法或属性时,如果当前变量并没有该方法或属性,就会在该变量所在原型链中依次向上查找是否存在该方法或属性,如果有则调用,否则返回undefined...乍一看,似乎并没有什么问题,对于业务似乎也不会产生什么问题,无论用户访问什么都应该只会返回“同学,游泳健身,了解一下?”...A:在我使用loadsh库4.17.10版本中,发现针对__proto__关键词做了判断和过滤,因此想到了通过访问构造函数prototype方式绕过 Q:在Demo中,为什么被攻击后,任意用户访问都是

1.1K20
  • JavaScript继承背后场景-prototype,__proto__, ]

    如上图所示,理解JavaScript继承关键是要理解母鸡如何产蛋过程。 [[prototype]]、__proto__、prototype三者之间联系 每个对象都可以有另一个对象作为其原型。...__是Object.prototype对象访问属性。...JavaScript经典继承图 这也是通过构造函数来创建对象,但是在这一系列对象和实例之间我们焦点是放在原型链上。原型对象其实也是普通对象,也有属于它们自己属性。...如果move方法不是这个对象一个属性(意味着Dog这个类并没有move这个方法),则在原型链中上升一级(去原型链上寻找),即woofie .__ proto . proto__,或者与Animal.prototype...* 总结 [[Prototype]]:对象通过其内部属性指定原型对象 proto :创建对象实例拥有的内部属性,在语言层面可以直接访问[[Prototype]] prototype:prototype

    64010

    用前端原型链漏洞污染拿下了服务器

    “原型链污染”漏洞,看起来好高大上名字,和“互联网黑话”有得一拼,好奇心驱使下,抽丝剥茧地研究一番。...0x01 JavaScript原型链 1.1 基本概念 在javaScript中,实例对象与原型之间链接,叫做原型链。其基本思想是利用原型让一个引用类型继承另一个引用类型属性和方法。...图1.1 原型链关系图 1.2 原型链查找机制 当一个变量在调用某方法或属性时,如果当前变量并没有该方法或属性,就会在该变量所在原型链中依次向上查找是否存在该方法或属性,如果有则调用,否则返回undefined...乍一看,似乎并没有什么问题,对于业务似乎也不会产生什么问题,无论用户访问什么都应该只会返回“同学,游泳健身,了解一下?”...A:在我使用loadsh库4.17.10版本中,发现针对__proto__关键词做了判断和过滤,因此想到了通过访问构造函数prototype方式绕过 Q:在Demo中,为什么被攻击后,任意用户访问都是

    3.4K20

    Javascript 类、原型链、继承理解

    : a.类所有非静态【属性/方法】    非静态【属性/方法】就是每一个实例特有的,属于个性。...在Javascript中,每当我们使用new创建一个对象时,Javascript引擎就会自动为这个对象中添加一个__proto__属性,并让其指向其类prototype // 代码3.2 function...这就是Javascript著名原型链结果啦。话不多说,先上图: ? 当我们访问person.name时,发生了什么呢?...首先它会访问person对象本身属性,如果本身没有定义name属性的话,它会去寻找它__proto__属性对象,在这个例子中person__proto__属性对应是Pproto对象,所以person...这样我们就可以多定义一个类,把它叫做父类,在它里面包含所有的这些子类具有的相同属性/方法】,然后通过继承方式,让所有的子类都可以访问这些【属性/方法】,而不用每次都在子类定义中去定义这些【属性

    65410

    动图学 JavaScript 之:原型继承

    前言 你是否曾思考为什么我们能使用 JS 中一些内置属性和方法,比如 .length,.split(),.join()?我们并没有显式地声明它们,那么究竟它们从哪里来呢?...让我们将 dog1 打印到控制台,然后展开它属性: ? 可以看到我们添加属性有:name,breed,color 和 bark,但是快看,还有一个 __proto__ 属性!...你猜怎么着,这个 __proto__ 就是对 Dog.prototype 引用。这就是 原型继承 全部内容:构造函数创造每个实例都能够访问构造函数原型。 ? 原型继承好处 那么为什么这很酷?...这样每当我们访问实例属性时,引擎首先检查该属性在实例上是否定义,如果没有找到,就会通过 __proto__ 属性,顺着原型链 继续查找。 ? 不止是一层 这只是一个步骤,其实可以包含多个步骤!...我们并没有为 me 对象添加其他属性,但是访问它却有一个 __proto__ 属性,并且这个属性指向是具有 name 和 age 对象 person。

    55520

    一篇JavaScript技术栈带你了解继承和原型链

    JavaScript中,当我们使用new来创建一个对象时候,JavaScript引擎就会自动为这个对象添加一个__proto__属性,并指向其类prototype。...在JavaScript中引用类型相等意味着它们所指向都是同一个对象,任何一个实例化对象__proto__属性都指向其类prototype。...当我们person.name进行访问时候,可以看到我并没有写name这个属性,首先,person.name会去找对象中是否有这个name属性,如果没有,它就会去找__proto__属性对象。...原型链知识点,只要构造函数中没有定义同名非静态(属性或者是方法),那么每个对象进行访问时候都是访问其内部找到eat方法,这样我们就运用原型链,实现了类静态(属性或者是方法)。...使用原型好处就是可以让所有的对象实例共享原型对象包含属性和方法。

    45210

    一篇JavaScript技术栈带你了解继承和原型链

    JavaScript中,当我们使用new来创建一个对象时候,JavaScript引擎就会自动为这个对象添加一个__proto__属性,并指向其类prototype。...在JavaScript中引用类型相等意味着它们所指向都是同一个对象,任何一个实例化对象__proto__属性都指向其类prototype。...当我们person.name进行访问时候,可以看到我并没有写name这个属性,首先,person.name会去找对象中是否有这个name属性,如果没有,它就会去找__proto__属性对象。...原型链知识点,只要构造函数中没有定义同名非静态(属性或者是方法),那么每个对象进行访问时候都是访问其内部找到eat方法,这样我们就运用原型链,实现了类静态(属性或者是方法)。...使用原型好处就是可以让所有的对象实例共享原型对象包含属性和方法。

    36010

    一篇文章让你搞懂原型和原型链

    原型和原型链作为深入学习JavaScript最重要概念之一,如果掌握它了后,弄清楚例如:JavaScript继承,new关键字原来、封装及优化等概念将变得不在话下,那么下面我们开始关于原型和原型链介绍...JS中对象包含了一个prototype内部属性,这个属性对应就是该对象原型。 我们先看下图:a、b、c 分别为数组、对象、函数。 ? 可以看到,三者都有一个属性:__proto__ ?...当调用某种方法或查找某种属性时,首先会在自身调用和查找,如果自身并没有该属性或方法,则会去它__proto__属性中调用查找,也就是它构造函数prototype中调用查找。 什么是原型链?...查找属性,如果本身没有,则会去__proto__中查找,也就是构造函数显式原型中查找,如果构造函数显式原型中也没有该属性,因为构造函数显式原型也是对象,也有__proto__,那么会去它显式原型中查找...当 p 去访问 address 属性时,js会先在 p 实例属性中查找,发现找不到后,就会去 Person 原型对象上 查找。

    84410

    我不知道前端(二)

    对于这一块暂时不继续深入,标记一下有机会再说 ---- 条件式属性访问 Js是非常灵活语言,null或undefined是我觉得最灵性设定。...属性访问表达式可以帮我们简化这个问题 所以啦,得意于?. 我们在下述这种代码中可以直接条件判断 if(res?....(null) 可以看到我们用null作为参数时,打印出来直接就没有属性,这意味着这个Object是完完全全空,它没有在Object这里继承任何东西; 而如果我们要创建一个普通空对象(常规定义方法是...__proto__===null 已经被实例化对象__proto__属性指向其构造函数prototype(这是显然) ---- 今天暂且到这里,原型链一块要注意区分__proto__和prototype...区别,总结起来两点是 __proto__是每个对象都有的一个属性,而prototype是函数才会有的属性

    38820

    JavaScript 模式》读书笔记(6)— 代码复用模式1

    一、传统与现代继承模式比较 经常会在有关JavaScript继承模式主题讨论中听到术语“传统继承(classical inheritance)”,为此,让我们先阐明“传统(classical)”代表意义...如果您尝试访问say()方法,虽然块#2中并不包含say()方法,但是通过使用指向构造函数Parent()prototype(原型)属性隐式链接__proto__,便可以访问对象#1(Parent.prototype...请注意,这里仅使用__proto__来解释原型链,即使在一些环境中提供了该属性,在程序开发语言中也并不能使用该属性。...对象#3中并没有这样say()方法,因此它将通过原型链查询到#2.然而,#2中也没有该方法,因此它又顺着原型链查询到对象#1,而对象#1正好具有say()方法。...s.say(); // 输出“Adam”   以上输出结果可能并不是您期望

    26160

    JavaScript 模式》读书笔记(6)— 代码复用模式1

    一、传统与现代继承模式比较 经常会在有关JavaScript继承模式主题讨论中听到术语“传统继承(classical inheritance)”,为此,让我们先阐明“传统(classical)”代表意义...如果您尝试访问say()方法,虽然块#2中并不包含say()方法,但是通过使用指向构造函数Parent()prototype(原型)属性隐式链接__proto__,便可以访问对象#1(Parent.prototype...请注意,这里仅使用__proto__来解释原型链,即使在一些环境中提供了该属性,在程序开发语言中也并不能使用该属性。...对象#3中并没有这样say()方法,因此它将通过原型链查询到#2.然而,#2中也没有该方法,因此它又顺着原型链查询到对象#1,而对象#1正好具有say()方法。...s.say(); // 输出“Adam”   以上输出结果可能并不是您期望

    41630

    JavaScript中原型与原型链简单理解

    讲原型和原型链,如果是讲定义,那很是晦涩难懂,今天我们就通俗易懂说说原型与原型链。还需要借助阮老师Javascript继承机制设计思想”。...,我们可以看到我们实例化对象,有个__proto__属性,这个属性就是隐式原型,这个__proto__是所有对象都有的属性, ?...3 原型链 从上面这张图,我们可以看到原型链影子,由于JavaScript一切都是对象(除undefined),又由于所有对象都有__proto__属性,__proto__又指向构造函数prototype...,当我们访问一个对象属性时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己__proto__,于是就这样 一直找下去,也就是我们平时所说原型链概念...__proto__是所有对象都有的属性,通过__proto__链式查找,可以形成原型链,原型链终点是null。

    3961311

    JavaScript原型、原型链及原型链污染

    总结:不只是str和num对象,每个对象中都有__proto__属性JavaScript将这些对象(如:Number(函数也是对象))中共有属性,拿了出来,全都集中到一个新对象(num)中。...4-如果我们访问person中一个属性name,如果在person对象中找到,则直接返回。...5-如果通过person对象添加了一个属性name,则通过person访问name时,就相当于屏蔽了原型中属性name,输出是person对象中name值 6-通过person对象只能读取构造函数原型中属性...由于__proto__是任何对象都有的属性,而JavaScript里万物皆对象,所以会形成一条__proto__连起来链条,但递归访问__proto__必须最终到头,其终点是Null 当JavaScript...可以看到我们修改成功了,新生成 foo2 对象也具有hacker 属性,如果给foo1再往上加一个__proto__就可以修改(添加)Object属性了。 那么在哪些情况下原型链会存在污染?

    1K10

    JavaScript面试卷(二) -- 复杂创建对象模型

    这使得 WorkerBee 构造器成为Engineer 对象 一个方法。 base 属性名称并没有什么特殊性,我们可以使用任何其他合法名称来代替;base仅仅是为了贴近它用意。...name 和 dept 属性则不是 amy 对象本地,而是从 amy 对象 __proto__属性获得。...修改所有后代属性值 如果想在运行时修改一个对象属性值并且希望该值被所有该对象后代继承,您就不能在该对象构造器函数中定义该属性。而应该将该属性添加到该对象关联原型中。...判断实例关系 JavaScript 属性查找机制首先在自身对象属性中查找,如果指定属性名称没有找到,将在对象特殊属性__proto__中查找。...通过比较对象 __proto__ 属性和函数prototype 属性可以检测对象继承关系。

    59820

    JavaScript学习总结(四)——this、原型链、javascript面向对象

    ,在JavaScript中,原型也是一个对象,通过原型可以实现对象属性继承,JavaScript对象中都包含了一个" prototype"内部属性,这个属性对应就是该对象原型。...在JavaScript中,原型也是一个对象,通过原型可以实现对象属性继承,JavaScript对象中都包含了一个”[[Prototype]]”内部属性,这个属性对应就是该对象原型。...prototype是函数才有的属性,prototype本身就是一个对象,prototype对象中拥有constractor构造器(该构造器反向指回函数) __proto__是对象带有属性,用于访问创建对象类型对应原型...__是对象带有属性,用于访问创建对象类型对应原型 console.log(f1....引用 三、JavaScript面向对象(OOP) 3.1、封装 因为在JavaScript中没有访问修饰符,也没有块级作用域,this定义属性默认对外就是公开访问,如下示例:

    1.4K70

    构造函数和原型

    1.概述: 在典型OOP语言中(如Java) , 都存在类概念,类就是对象模板,对象就是类实例,但在ES6之前, JS中并没用引入类概念。...4.构造函数原型prototype(原型对象) 构造函数通过原型分配函数是所有对象共享JavaScript 规定,每一个构造函数都有一个prototype 属性,指向另一个对象。...8.原型链 每一个实例对象又有一个__proto__属性,指向构造函数原型对象,构造函数原型对象也是一个对象,也有__proto__属性,这样一层一层往上找就形成了原型链。 ?...9.原型链和JavaScript成员查找机制 任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象就有__proto__属性,这样一层一层往上找,就形成了一条链,我们称此为原型链...; 注意:如果访问对象本身有这个属性,这个对象原型也有此属性时,实行就近原则,得到是对象本身这个属性值 1、当访问一个对象属性(包括方法)时,首先查找这个对象自身有没有该属性

    47950

    JavaScript——对象原型

    如机制和原理(对象基于原型)里记述那样,JavaScript是一个基于原型面向对象语言。本文着重于对原型实现机制进行剖析和说明。...原型链实现 JavaScript里所有的对象都有一个名为__proto__属性,这个属性里面存放就是对象参照原型对象引用。 ?...__proto__对象连在一起就构成了一个原型链,链顶端就是Object.prototype对象,Object.prototype__proto__属性值则是null __proto__属性被包含在...原型自动设置 当通过构造函数创建新对象时,JavaScript会自动将构造函数prototype属性值设置到新对象__proto__属性里。...__proto__ = Person.prototype; tom = Person.call(tom,"Tom"); 属性继承 当访问对象属性时,JavaScript会通过遍历原型链进行查找,直到找到给定名称属性为止

    58610

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

    JavaScript 中并不如此复制——而是在对象实例和它构造器之间建立一个链接(它是__proto__属性,是从构造函数prototype属性派生),之后通过上溯原型链,在构造器中找到这些属性和方法...---- 在javascript中,函数可以有属性。 每个函数都有一个特殊属性叫作原型(prototype) ,正如下面展示。...注意:必须重申,原型链中方法和属性没有被复制到其他对象——它们被访问需要通过前面所说“原型链”方式。...注意:没有官方方法用于直接访问一个对象原型对象——原型链中“连接”被定义在一个内部属性中,在 JavaScript 语言标准中用 [[prototype]] 表示(参见 ECMAScript)。...你可能会认为,this 关键字指向当前对象原型对象,其实不是(还记得么?原型对象是一个内部对象,应当使用 __proto__ 访问)。

    1.1K30

    【说站】JavaScript对象原型__ proto__介绍

    JavaScript对象原型__ proto__介绍 1、__proto__对象原型和原型对象 prototype 是等价。 2、意义在于为对象查找机制提供一个方向。...但是作为非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype。... = function() {         console.log('正在哼哼唧唧唱歌...');     }     let zs = new People('张三');     //实例对象身上并没有...sing方法     //但是通过实例对象访问这个方法     // zs.sing();            // console.log(zs....__proto__ == People.prototype);     // true       console.log(zs); 以上就是JavaScript对象原型__ proto__介绍,希望对大家有所帮助

    25610
    领券