我眼里的js原型链(学习笔记 )

申明

  • 在js中都是对象 , Number是 String是 Boolean也是 Function是 Function的prototype也是 对象都具有 proto 属性
  • Function 这个对象有它特有的 原型属性 即 prototype 这是属性是一个指针,指向一个对象 (包含所有实例共享的属性和方法 叫做原型对象) 原型对象有一个属性叫做 construcor 这个只会原构造函数
console.log(Function.prototype.constructor === Function)
VM1949:1 true

console.log(Function.prototype === Function.__proto__)
VM2452:1 true

console.log(Function.__proto__.__proto__ === Object.prototype)
VM2551:1 true

console.log(Object.__proto__ === Function.prototype)
VM2713:1 true

console.log(Object.constructor === Function)
VM2757:1 true
 
console.log(Function.constructor === Function)
VM2873:1 true

在这里插入图片描述
参考于(JS原型链简单图解

String,Number,Array,Boolean 都是function 我们平时通过 var a =1 等申明  实质上是一个语法糖
var A = function () {};
var B ={};
console.log(A.__proto__.__proto__)
console.log(B.__proto__)
A.__proto__.__proto__ === B.__proto__
true
因为function是特殊的对象,A.proto就指向了构造该函数的一个函数(随意起个名字 C),C的proto就指向了和B对象一样的proto


var a = new Number()
console.log(a.__proto__ === Number.prototype)
VM3858:2 true
undefined
console.log(a.constructor === Number)
VM3991:1 true
显式原型prototype ———— 每一个 函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象
JavaScript中任意对象都有一个内置属性Prototype,在ES5之前没有标准的方法访问这个内置属性,但是大多数浏览器都支持通过__proto__来访问。ES5中有了对于这个内置属性标准的Get方法Object.getPrototypeOf()。

隐式原型指向创建这个对象的函数(constructor)的prototype

var Like = function() {}
var like = new Like()
console.log(like.__proto__ === Like.prototype)
VM456:3 true

猜你喜欢

转载自blog.csdn.net/WenYuShuang/article/details/86648822