JS里的对象

全局对象global (浏览器上叫window)

不管你在哪个网页都可以访问到这个对象—window
它有很多属性
global.parseInt()
golbal.parseFloat()

假设浏览器分给js一部分内存 如果内存里空空如也我们就什么也调用不了

每次浏览器生成的时候就生成一个global

Number

1
2
3
4
var n = 1;
var n2 = new Number(1);
// n2是 Number对象 提供很多方法 可以 n2.toString() n2.toFixed(2)
//但是 n 也可以 n.toString() n.toFixed(2) 但是 n是一个基本类型 没有方法


JS设计之初因为BOSS要求JS要像JAVA 作者为了满足老板的需求“长得像JAVA”
所以出现了 var n2 = new Number() 但实际上没有人用
JS实际用法 是 var n = 1;

但是它是怎么解决基本类型 调用方法的呢?

妙计:临时转换

1
2
3
var n  = 1;
n.toString()
// 调用toString()的时候 产生一个临时的对象 temp

  • step1 temp = new Number(n);
  • step2 temp.toSrring();
  • step3 方法调用结束后销毁 temp对象

这样我就永远不用使用new Number()去创建一个number对象 并调用其相关方法

调用过程

基本类型的xxx是多少

String对象
1
2
3
slice() // 切片方法  'hello'.slice(1,3)  输出  el   口诀包头不包尾
concat() //字符串拼接
trim() //去除首尾空格
Boolean对象

一个“坑”点

1
2
3
4
var b1 = false;
var b2 = new Boolean(false);
if(b1){console.log(1)} //不会打印1
if(b2){console.log(2)} //打印2 因为所有对象转换为boolean值都是true

Object对象
1
2
3
4
var o1  = { };
var o2 = new Object();
// o1和o2没区别 都是对象
//注意一点 凡是新声明的对象 都是不相等的 o1 !== o2

共有属性 prototype

不同类型对象都有一个toString() 和valueOf()

如果方法挂载到 对象上就会要出现很多的key

1
__proto__ //隐藏在对象里 特定的指向 该类型的共有属性



原型链 ==> 这样一层一层向上指的过程 形成了一个链条

prototype 就是共有属性


1
2
String.prototype是 String的共有属性 (这里是防止它没有,系统生成的)
s.__proto__ 是String共有属性的引用 (这个是实际使用的)

烧脑部分

1
2
3
4
5
__proto__与 prototype
// var n = new Number()
// var b = new Boolean()
// var s = new String()
// var o = new Object()


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var 对象 = new 函数()
对象.__proto__ === 函数.prototype

var s = new String()
s.__proto__ === String.prototype // true


//烧脑的来了
// 函数.prototype也是一个对象
函数.prototype.__proto__ === Object.prototype // true

//再次烧脑 函数是不是一个对象 ==》是
// var obj2 = 函数
// obj2.__proto__ === Function.prototype
函数.__proto__ === Function.prototype
Function.__proto__ === Function.prototype
// Function.prototype也是一个对象
Function.prototype.__proto__ === Object.prototype


Function.__proto__ === Function.prototype //true

结论

1
2
3
4
5
对象.__proto__  === 函数.prototype


Object.__proto__ === Function.prototype
Object.prototype.__proto__ 实际是 null