原型与原型链

全局对象global (window)

window下的属性分两种:一种是ECMA Script 规定,一种浏览器私有(window)

ECMA Script 私有
parseInt alert(弹框)
parseFloat prompt(用户填写)
Number() consode(开发者工具)
String() confirm(确认)
Boolean() document(文档)
Object() history
... ...

全局函数

Number

var n = new Number(1); //这是一个对象,有自己的属性。
var x = 1; //这时x一个基本类型。
x.toString() //以n不同的是:这时浏览器会声明一个临时变量temp,将x作为number对象赋值给他。
var temp = new number(x);
temp.toString();// 与n不同的是,执行完后temp就会被删除;
x.xxx = 2; //可以的
x.xxx //x.xxx===undefined,因为xxx是存在temp的,上一句的temp执行完后就被删除,所以xxx也被删除了

String

var n = String("xyb")
var n1 = new String(n)
n1[0] //'x'因为String()对象有hash的属性
n[0] // 'x'也能调用这个属性,但n实质没有属性,这个原理和上面Number一样

Boolean

var b = false; //false
var b1 = new Boolean(false); //true
if(b){console.log('true')};
if(b1){console.log('true')}; // true
//只会输出b1,因为所有对象都是true!!

Object

var o1 = {}
var o2 = new Object()
o1 和 o2 没区别
o1 === o2 //false,因为比较的是地址,而地址不同

公用属性(原型)

所有对象都有 toString 和 valueOf 属性,那么我们是否有必要给每个对象一个 toString 和 valueOf 呢?

明显不需要。

JS 的做法是把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象)

然后让每一个对象的 __ proto__ 存储这个「公用属性组成的对象」的地址。

proto和prototype的区别

window里存放obj、num…这几个对象,对象里的prototype属性里存了它们原型的地址,在你写:var n = new Number(1); 就会把Number.prototype里的地址放入n的proto属性里

你可能感兴趣的:(原型与原型链)