原型与原型链

最关键的一个等式

对象.__proto__ === 函数.prototype

包装类

你想用简单类型又想用对象的toString,当你写n.toString的时候,实际上这是不存在的,原始值没有方法和属性。但是布兰德爱奇会让它做这样一个事情,它首先声明一个临时的对象,temp= new Number(n),也就是temp是n的一个复杂类型的一个封装。你的toString实际上是temp.toString。把temp.toString的值作为n.toString的值,然后把temp干掉,这个temp就好像没有存在一样,但是它临时把这个toString弄过来了。
本来不存在的,但是我们搞一个复杂类型让它的toString’方法存在,存在之后,拿到它的值返回给你的toString,也就是返回给你的表达式n.toString(),然后我这个temp干掉。

这里的n.xxx实际上是给temp.xxx属性值加了个2进去,但是执行完这句话,temp就会被抹杀掉,你刚刚非temp.xxx赋的那个值就随着temp一起被抹杀掉了。这个时候再去读n.xxx,它又会创建一个新的temp,里面有valueof,有toString方法,但是没有xxx,这是个全新的temp。上一个有xxx属性的temp赋完值就没销毁了。所以这时的temp.xxx是undefined。
一个基本类型可以去点什么什么,实际上是有一个临时对象

一些笔记

为什么空对象和空对象不相等,因为存的地址不一样
new Object那种写法平时用的很少,对象字面量用得多一点
所有的函数如果是window.什么,那个window可以省略掉

object的共有属性(是所有对象的共有属性)就没有_ proto 了,它的 proto _指向null
如果这个hash没有人引用的话,就会被垃圾回收掉,那谁在引用object的共有属性呢
Object.prototype在引用它,它就是object的共有属性,我们把共有属性这四个字换一个词,叫做原型。原型就是共有属性的意思
valueOf是返回原始值的一个方法

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