Creeper

Results 220 comments of Creeper

### `Object`和`Function`的鸡和蛋的问题 ES5关于`Object`和`Function`的规定: [Object](http://www.ecma-international.org/ecma-262/5.1/#sec-15.2) [Function](http://www.ecma-international.org/ecma-262/5.1/#sec-15.3) 从上面的规定再结合其它,理出以下几点: 1. 原型链的尽头(root)是`Object.prototype`。**所有对象均从`Object.prototype`继承属性。** 2. `Function.prototype`和`Function.__proto__`为**同一对象**。 这意味着: **`Object`/`Array`/`String`等等构造函数本质上和`Function`一样,均继承于`Function.prototype`。** 3. `Function.prototype`直接继承root(`Object.prototype`)。 通过这点我们可以弄清 **继承的原型链:`Object.prototype(root)` > The value of the [[Prototype]] internal property of the Function prototype object is...

@Kelichao 哈哈,欢迎提出见解。

@Evllis 忘记从哪偷的图了... 很久很久以前就有这张图了。 **Update: 找不到图片具体哪来的,但目前看起来,一个可信的来源是 [mollypages.org](http://www.mollypages.org/tutorials/js.mp)**

其实我们可以先看这样一个问题: **`Object.prototype` 是对象吗?** 1. 当然是。`An object is a collection of properties and has a single prototype object. The prototype may be the null value.` 这是object的定义,`Object.prototype`显然是符合这个定义的。 2. 但是,**`Object.prototype`并不是`Object`的实例。** 这也很好理解`Object.prototype.__proto__`是`null`。 这已经某种程度上解开了鸡和蛋的问题:**`Object.prototype`是对象,但它不是通过`Object`函数创建的。** 下面我们来看`Function/Function.prototype`:...

@mystorp **`c.__proto__` 为什么显示 `Parent` ?** 因为 `c = new Child` ,所以,`c.__proto__` 就是 `Child.prototype` (即 `Object.create(Parent.prototype)`)。 问题即可以转化为 `var x = Object.create(Parent.prototype)`, 为什么 `x` 显示为 `Parent`。 很简单啊,`Object.create` 就是指定 `x.__proto__` 为 `Parent`,`x` 就是...

@deqing 你是对的,感谢指正。可能15年写的时候规范和浏览器中的行为还不够明确,但现在ES2015规范已经明确: [初始化一个函数对象](https://www.ecma-international.org/ecma-262/6.0/#sec-function-definitions-runtime-semantics-instantiatefunctionobject): [MakeConstructor](https://www.ecma-international.org/ecma-262/6.0/#sec-makeconstructor): **prototype 是一个有 constructor 属性的对象,不是空对象。**

1. 《JavaScript权威指南》是我初学JS的入门书籍,对我帮助很大,我本人不觉得它烂。另外《你不知道的JavaScript》非常好,推荐现在学JS的人看。 2. 博客搬到 issue 的出发点是更利于相互讨论,共同进步。我写的东西不一定对,大家讨论指正是非常好的;同时也可以利用github的生态。至于 **吸星**,能吸星自然是再好不过了,有人表扬是件愉快的事。 @yunfeiyang27 大家更宽容一点,专注于技术是最好的。另外你有问题/建议/指责可以邮件我,不要过多干扰其他人的**时间线**。issue里面最好都是技术相关的。thx。

@whosesmile @zxc5800 基本类型(primitive types)不是对象,**没有**原型链。 但是,基本类型有 **Boxing / Unboxing** 啊 😄