js的__proto__、constructor和prototype属性

__proto__和constructor属性是对象所独有的;prototype属性是函数所独有的。但是由于JS中函数也是一种对象,所以函数也拥有__proto__和constructor属性。

先来看下面这段代码:
function foo(){}
let f = new foo();

foo()是函数,它的constructor属性指向Function(),它的prototype属性指向foo.prototype,它的__proto__属性指向Function.prototype。
f是foo实例化的对象,它的constructor属性指向foo(),__proto__属性指向foo.prototype。

__proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,然后返回undefined,通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链。
prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法。
constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function。
?

原文地址:https://blog.51cto.com/zhangzhao/2396830

时间: 2024-11-05 13:36:06

js的__proto__、constructor和prototype属性的相关文章

【推荐】关于JS中的constructor与prototype【转】

最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 function Person(name)   {     alert(name);   }   Person('js');//js 上面的代码中,Person的表现的确跟一般的函数没有什么区别,接着看下面的代码

【JavaScript】关于JS中的constructor与prototype

最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 function Person(name)   {     alert(name);   }   Person('js');//js 上面的代码中,Person的表现的确跟一般的函数没有什么区别,接着看下面的代码

关于JS中的constructor与prototype<转>

在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 js代码: function Person(name) { alert(name); } Person('js');//js 上面的代码中,Person的表现的确跟一般的函数没有什么区别,接着看下面的代码 function Person(name) { this.name=

关于JS中的constructor与prototype

最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 function Person(name)   {     alert(name);   }   Person('js');//js 上面的代码中,Person的表现的确跟一般的函数没有什么区别,接着看下面的代码

js中的constructor与prototype

constructor始终指向创建当前对象的构造函数.比如下面例子: // 等价于 var foo = new Array(1, 56, 34, 12); var arr = [1, 56, 34, 12]; console.log(arr.constructor === Array); // true // 等价于 var foo = new Function(); var Foo = function() { }; console.log(Foo.constructor === Functi

Object.prototype.__proto__ 、Object.prototype和 Object.prototype.constructor

Object.prototype.__proto__: 实体对象指向造它的构造函数的 prototype属性所指 的对象 ,实例的__proto__是引用构造函数的prototype属性所指对象, Object.prototype : js规定,构造函数有prototype 属性,指向一个对象,这个对象一般就是构造函数的公有成员. 所以 __proto__  和 prototype 可以指向同一个对象  {key1:value1,key2:value2,......},构造函数的私有和特权函数会

原型链之prototype/__proto__/constructor

(一)prototype 每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和方法. 通过Function.prototype.bind方法构造出来的函数是个例外,它没有prototype属性 (二)__proto__ 根据ECMA定义 'to the value of its constructor’s "prototy

为什么实例没有prototype属性?什么时候对象会有prototype属性呢?

为什么实例没有prototype属性?什么时候对象会有prototype属性呢? javascript loudou 1月12日提问 关注 9 关注 收藏 6 收藏,554 浏览 问题对人有帮助,内容完整,我也想知道答案0 问题没有实际价值,缺少关键内容,没有改进余地 function Foo() {} var foo = new Foo(); console.log(foo.prototype);// undefined console.log(foo.__proto__ === Foo.pr

javascript 中isPrototypeOf 、hasOwnProperty、constructor、prototype等用法

hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员. isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false. instanceof  操作检查对象中是否有名为 property 的属性.也可以检查对象的原型,判断该属性是否为原型链的一部分. Java代码 hasOwnProperty:   var obj = {a:1,b:2}