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

为什么obj.constructor.prototype并不总是等于obj.__proto__?

obj.constructor.prototype并不总是等于obj.proto的原因是因为它们分别指向不同的对象。

首先,让我们了解一下这两个属性的含义:

  1. obj.constructor.prototype:这是一个对象的属性,指向对象的构造函数的原型对象。每个JavaScript对象都有一个constructor属性,它指向创建该对象的构造函数。通过constructor属性,我们可以访问构造函数的原型对象,进而访问原型对象上的方法和属性。
  2. obj.proto:这是一个对象的内部属性,指向该对象的原型对象。原型对象是一个普通的JavaScript对象,它包含了共享给所有该对象实例的属性和方法。

虽然在大多数情况下,obj.constructor.prototype和obj.proto指向同一个对象,但是它们之间存在一些细微的差异。这是因为在JavaScript中,对象的原型可以通过多种方式进行修改和设置。

  1. 修改原型对象:
    • 通过修改obj.constructor.prototype来修改原型对象,这会影响所有通过该构造函数创建的对象的原型。
    • 通过修改obj.proto来修改原型对象,这只会影响当前对象的原型,不会影响其他对象。
  • 重新设置原型对象:
    • 通过将一个新的对象赋值给obj.constructor.prototype来重新设置原型对象,这会影响所有通过该构造函数创建的对象的原型。
    • 通过将一个新的对象赋值给obj.proto来重新设置原型对象,这只会影响当前对象的原型,不会影响其他对象。

综上所述,obj.constructor.prototype和obj.proto之间的差异在于它们指向的对象可能不同,取决于对象的创建方式、原型对象的修改和重新设置操作。因此,我们不能简单地认为它们总是相等。

对于这个问题,腾讯云没有特定的产品或链接可以提供。但腾讯云提供了全面的云计算服务,包括云服务器、云数据库、云存储等,可以满足各种云计算需求。

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

相关·内容

总结一下js的原型和原型链

指向A.prototype(obj.constructor.prototype===A.prototype,当A.prototype改变时则不成立,下文有遇到)。...__来取得原型链上的原型属性和原型方法,FireFox公开了__proto__,可以在FireFox中alert(obj....当在B内部执行了this.x=x后(这里的this是B的对象),B当然就拥有了x属性,当然B的x属性和A的x属性两者是独立,所以并不能算严格的继承。...第5、6、7行有更简单的实现,就是通过call(apply)方法:A.call(this,x); 这两种方法都有将this传递到A的执行里,this指向的是B的对象,这就是为什么不直接A(x)的原因。...虽然obj.constructor===A(true),但是对于new B()的行为来说,执行了上面所说的通过构造函数创建实例对象的3个步骤,第一步,创建空对象;第二步,obj.

99850

详解原型与原型链

; } const person = new Person("clz"); console.log(person.constructor === Person); // true 实例的构造函数并不是自身属性...Person.prototype.constructor === Person); // true console.log(person.hasOwnProperty("constructor")); // false:constructor属性并不是实例自身的属性...__proto__ obj.constructor.prototype Object.getPrototypeOf(obj) function Person(name) { this.name =...以下部分会涉及一丢丢原型链的知识(如果没看懂,可以看下原型链再来看) __proto__属性是私有属性,存在浏览器兼容性问题,缺乏非浏览器环境的支持 如果 obj 的 constructor属性被覆盖,那么obj.constructor.prototype...false: 第二种方法 console.log(Object.getPrototypeOf(person) === proto); // true: 第三种方法 设置原型 设置原型对象有 3 种方法 obj

36830

彻底弄懂JS原型与原型链

图片可以看到obj上确实多了一个sayHello的属性,值为一个函数,但是问题来了,obj上面并没有hasOwnProperty这个方法,为什么我们可以调用呢?这就引出了 原型。...现在我们已经初步理解了原型和原型链,到现在大家明白为什么数组都可以使用push、slice等方法,函数可以使用call、bind等方法了吧,因为在它们的原型链上找到了对应的方法。...== null) { // 如果对象有原型,则在原型上递归查找 return getProperty(obj....对象都是由构造函数创建,对象的__proto__属性指向其原型对象,构造函数的prototype属性指向其创建的对象实例的原型对象,所以对象的__proto__属性等于创建它的构造函数的prototype...九、举一反三1. instanceof操作符平常我们判断一个变量的类型会使用typeof运算符,但是引用类型并不适用,除了函数对象会返回function外,其他都返回object。

1.1K40

彻底搞懂JS原型与原型链

图片可以看到obj上确实多了一个sayHello的属性,值为一个函数,但是问题来了,obj上面并没有hasOwnProperty这个方法,为什么我们可以调用呢?这就引出了 原型。...现在我们已经初步理解了原型和原型链,到现在大家明白为什么数组都可以使用push、slice等方法,函数可以使用call、bind等方法了吧,因为在它们的原型链上找到了对应的方法。...== null) { // 如果对象有原型,则在原型上递归查找 return getProperty(obj....对象都是由构造函数创建,对象的__proto__属性指向其原型对象,构造函数的prototype属性指向其创建的对象实例的原型对象,所以对象的__proto__属性等于创建它的构造函数的prototype...九、举一反三1. instanceof操作符平常我们判断一个变量的类型会使用typeof运算符,但是引用类型并不适用,除了函数对象会返回function外,其他都返回object。

1.4K20

知其然,知其所以然,JS 对象创建与继承

、构造、原型”设计模式,正在灯火阑珊处 JS精粹,原型链继承和构造函数继承的 “毛病” “工厂、构造、原型” 设计模式与 JS 继承 JS 高级程序设计 4:class 继承的重点 JS class 并不只是简单的语法糖...让人不禁想问:JS 为什么非要用到这种 3 种设计模式了呢??...为什么“子类要继承父类原型上的属性”?就靠 this 绑定来找不行吗?...#22 对象与函数 最后本瓜想再谈谈关于 JS 对象和函数的关系: 即使是这样声明一个对象,let obj = {} ,它一样是由构造函数 Object 构造而来的: let obj = {} obj...对应代码中的意思: 所有的构造函数的隐式原型都等于 Function 的显示原型,函数都是由 Function 构造而来,Object 构造函数也不例外; 所有构造函数的显示原型的隐式原型,都等于 Object

48540

深入理解Js中的this

深入理解Js中的this JavaScript作用域为静态作用域static scope,但是在Js中的this却是一个例外,this的指向问题就类似于动态作用域,其并不关心函数和作用域是如何声明以及在何处声明的...作用域 我们先来了解一下JavaScript的作用域,以便理解为什么说this更类似于动态作用域,通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域...如果我们想把某个函数强制在某个环境即对象上,那么就可以使用apply、call、bind强制绑定this去执行即可,每个Function对象都存在apply()、call()、bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内...function _new(base,...args){ var obj = {}; obj....箭头函数调用时并不会生成自身作用域下的this,它只会从自己的作用域链的上一层继承this。

40110

JavaScript 工厂函数 vs 构造函数

它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性) 构造函数 不同于其它的主流编程语言,JavaScript的构造函数并不是作为类的一个特定方法存在的;当任意一个普通函数用于创建一类对象时...obj.a = 100; var arr = []; arr.a = 100; function fn () {} fn.a = 100; // 要点二:__proto__ console.log(obj...prototype console.log(fn.prototype) // 要点四:引用类型的 __proto__ 属性值指向它的构造函数的 prototype 属性值 console.log(obj...但是在 javascript 中,并不是那么严格,如果你不能正确理解它们可能会导致很多问题。...因此,使用new运算符,JavaScript引擎将this 变量设置为引用新创建的对象实例,这就是为什么我们可以看到传递给构造函数的所有属性都已设置为 mike。

1K20

谁更靠谱?转化加倍 vs. 流量加倍

这就是为什么如果你想增加收入,转化比流量更重要。 这只是转化比流量更重要的三个主要原因之一。接着读,了解其他两个。 看起来很熟悉?...更多的流量并不总是等于更多的销售,更多转化却总能带来更多销售 更多流量并不总是等于更多销售。如果你引进大量流量,但是是错误的流量,访客会跳出,也不会带来交易。...交易,为了便于讨论,我们假设每个客户等于1000美金,所以现在你的网站有1万美金的销售。 现在如果你想使你的销售翻倍,下面是通过提高转化和提高流量来完成你的目标的对比: ?...这里要看的另一个重要因素是,通常你的流量提高了,你的转化率并不会保持稳定,实际还会下降。因此在这种情况下,通过流量翻倍而不是转化翻倍来达到一个月增加1万销售额的成功的机会比较低。 ?...不管你看什么数据,投资你的网站总是位于你能做的最好的ROI营销决策列表的顶部。从我们的数据中可以看出,它平均带来275%的ROI,或者每美元的花费带来额外2.75美金的收益。

65640

无偏估计

定义 无偏估计:估计量的均值等于真实值,即具体每一次估计值可能大于真实值,也可能小于真实值,而不能总是大于或小于真实值(这就产生了系统误差)。...为什么方差的分母是n-1? 结论: 首先这个问题本身概念混淆了。 如果已知全部的数据,那么均值和方差可以直接求出。...因此,这个问题应该改为,为什么随机变量的方差的估计的分母是n-1? 如果我们已经知道了全部的数据,那就可以求出均值μ,σ,此时就是常规的分母为n的公式直接求,但这并不是估计!...这也就说明了为什么不能使用\(frac{1}{n}\) 所以把分母从n换成n-1,就是把对方差的估计稍微放大一点点。至于为什么是n-1,而不是n-2,n-3,...,有严格的数学证明。...无偏估计虽然在数学上更好,但是并不总是“最好”的估计,在实际中经常会使用具有其它重要性质的有偏估计。 原文链接:无偏估计 MARSGGBO♥原创 2018-8-4

1K10
领券