老师讲的很好,我觉得理解的关键就在于对原型和原型属性的理解, 即_proto_ 和prototype的区别, _proto_是实例对象的一个引用,而prototype是一个构造器的属性对象,这个属性对象里又有一个_proto_引用,以此类推。。
2015-11-29
js中是先有Object还是Object.prototype,还是Function?Object构造器在何时被构造?Object是Function构造的吗?反过来呢?
2015-11-29
最赞回答 / 零零拾
“/b”匹配的只是一个位置,这个位置的一侧是构成单词的字符,另一侧为非单词字符、字符串的开始或结束位置。“/b”是零宽度的。其实,说白了,就是单词的两侧啦请看下面例子:这是一个字符串:hello this is a test!然后我们把正侧表达式\b 替换为_得到结果如下:_hello_ _this_ _is_ _a_ _test_!上面所有的_的位置都是原来的\b,这下明白了吧。^.^
2015-11-27
包装对象,就是当基本类型以对象的方式去使用时,JavaScript会转换成对应的包装类型,相当于new一个对象,内容和基本类型的内容一样,然后当操作完成再去访问的时候,这个临时对象会被销毁,然后再访问时候就是undefined
2015-11-26
str是string(基本类型),本身是没有方法的。
当尝试把基本类型的str当做对象一样访问时,例如:str.length;
解释器会创建一个临时的包装对象,伪代码:
[[tempObj]] = new String(str);
[[tempObj]].length; // 返回具体的length;
delete [[tempObj]]; // 销毁临时对象
重复访问str.length会重复创建这个临时对象。
所以str.t赋值可以成功,但再次访问str.t返回undefined,因为每次创建的临时包装对象都是不同的。
当尝试把基本类型的str当做对象一样访问时,例如:str.length;
解释器会创建一个临时的包装对象,伪代码:
[[tempObj]] = new String(str);
[[tempObj]].length; // 返回具体的length;
delete [[tempObj]]; // 销毁临时对象
重复访问str.length会重复创建这个临时对象。
所以str.t赋值可以成功,但再次访问str.t返回undefined,因为每次创建的临时包装对象都是不同的。
2015-11-26