前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别

全局变量

Global是是ECMAScript 中的全局对象(浏览器中是window),不属于其他对象的属性和方法,所有在全局作用域中定义的属性和方法,都是Global对象的属性(window)。

window的属性分为两类,一种是ECMAScript 规定的,一种是浏览器私有的(各浏览器可能不一样)。ECMAScript 规定的的有parseIntparseFloatNumberStringObjectBoolean等,浏览器私有的alertconsolepromptdocument等。

var n = 1        //n是基本类型(number)
var n1 = new Number(1)        //n1是对象(object)

对象有toString()方法,比如n1.toString()
基本类型也可以用toString()方法,它是通过在内存中创建一个临时变量来获取的,比如temp.toString(),在语句结束后这个变量就被回收了,所以:

var a = 1
a.xxx = 2        //语句结束后被回收
a.xxx   //undefined,再次访问该属性,值为undefined

原型

__proto__prototype的区别:

var s = new String()
//String.prototype 是 String 的公共属性(原型)的引用
//s.__proto__ 是 String 的公有属性(原型)的引用

NumberStringObjectBoolean的公有属性都存储在Object原型中。没写代码的时,浏览器就默认有这条原型链指向Object原型,如下图;当我们创建了一个变量后,它就创建了在Heap 中创建了一个对象,指向这个对象本身的原型,不在指向prototype,如下图红线。

image

对象.proto === 函数.prototype;

var __①__ = new __②__;
//① 类型:对象
//② 类型:函数

var Object = new Function();
//var 对象 = new 函数;

Object.__proto__ === Function.prototype;
//对象.__proto__ === 函数.prototype;

Function.__proto__ === Function.prototype;
//因为 Function 也是 Object

你可能感兴趣的:(前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别)