阅读更多
0. JavaScript语言中,整个核心的体系结构都围绕着两个构造函数Object和Function来构建的。
1. 一个对象的原型就是它的构造函数的prototype的值。
2.所有的函数都有一个prototype属性,当一个函数被定义的时候,prototype自动创建和初始化;而对象没有prototype属性。
prototype属性初始化值是一个对象,这个对象只有一个属性--constructor,它指回到和原型相关联的构造函数,Person.prototype.constructor === Person === true。
3. 添加给原型的任何属性,都会成为被构造函数初始化的对象的属性。
4. 函数原型中的属性,函数本身访问不到,undefined,只有该函数实例化后的对象可以访问。
5. js中没有类。
6. 直接定义的变量或者函数都是window的属性。
7. this的具体含义要看使用this的上下文, this一般在函数中使用,所以this的含义得看调用函数的是谁。
8. constructor始终指向创建当前对象的构造函数,每一个对象都包含这个属性,在自己实现继承关系时,要注意constructor的指向问题。
9. 对象中的constructor属性是来自->实例化该对象的函数的prototype属性指向的对象的constructor属性(参照第一条);有点绕,其实就是对象继承了对象原型中的属性。
10. 创建类的阶段不会初始化父类的数据,因为Person是一个空的构造函数。
11. 每一个函数和new操作符生成的对象都具有一个属性__proto__, 这个属性保存了创建它的构造函数的prototype属性的引用。IE不支持__proto__属性。
12. 直接用function关键字定义的函数要和用new定义的对象区分开,因为函数也可以说是对象,也可以用new Function()来定义 。
13. alert一个函数的结果是整个函数;alert一个对象的结果是[object Object]。
14. alert调用了toString函数
15. 'isstring'.constructor;//String()
true.constructor;//Boolean()
9.0.constructor;//Number();这下对了吧csf178
(9).constructor;//Number();匿名对象
9.constructor;//SyntaxError;经csf178指正,这是浮点数转换造成的语法冲突
[].constructor;//Array()
{}.constructor;//fireFox :SyntaxError;IE : Object();注意javascript定义中{}是代码块和对象定义,不是Operator
({}).constructor;//Object();匿名对象
16. Function.constructor === Object.constructor // true, function Function(){ [native code] }
Function和Object都是有同一个构造函数初始化的, Object 是可以delete的,Function不行,
17. Function instanceof Object //true
Function.prototype是一个对象,所以他的构造函数是Object. 从原型链机制的的角度来说,那就是说所有的函数都能通过原型链找到创建他们的Object构造函数的构造原型Object.prototype对
象
Object instanceof Function //true
Object, Function, Array等等这些都被称作是构造“函数”,他们都是函数。而所有的函数都是构造函数Function的实例。从原型链机制的的角度来说,那就是说所有的函数都能通过原型链找到
创建他们的Function构造函数的构造原型Function.protorype对象
18. instanceof是一个二元运算符,如:A instanceof B. 其中,A必须是一个合法的JavaScript对象,B必须是一个合法的JavaScript函数 (function).
如果函数B在对象A的原型链 (prototype chain) 中被发现,那么instanceof操作符将返回true,否则返回false.
19. 原型链 p->Person.prototype->Object.prototype->null;Person->Function.prototype->Object.prototype->null;Object.prototype.__proto__ === null;Object.prototype为空
20. A prototype property is automatically created for every function, to provide for the possibility that the function will be used as a constructor.
prototype是每个函数都会有的一个成员,并且会在此函数被当做构造器调用时发挥作用。所以普通的对象没有prototype属性。
21. 普通对象 new Person();函数对象,用function关键字定义的或者new Fcuntion().区分开这两种对象。