当前位置 : 主页 > 大数据 > 区块链 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
全局变量 Global 是是ECMAScript 中的全局对象(浏览器中是 window ),不属于其他对象的属性和方法,所有在全局作用域中定义的属性和方法,都是 Global 对象的属性( window )。 window 的属

全局变量

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

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

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

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

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

String 常用 API

trim()裁剪字符串两边的空格
concat()连接两个字符串

原型

__proto__prototype的区别:

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

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

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

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

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

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

Function.__proto__ === Function.prototype;
//因为 Function 也是 Object
网友评论