《JavaScript语言精粹》读书笔记
第三章:对象
//1.定义一个方法 method
Function .prototype.method=function(name, func){
this.prototype[name]=func;
return this;
}
//2.给Object增加一个create方法,这个方法创建一个使用原对象作为其原型的新对象
Object.create=function(o){
var F=function(){};
F.prototype=o;
return new F();
}
//继承
Function.method(‘inherits’, function(Parent){
this.prototype=new Parent();
return this;
});
1)JS中的对象是name/value对的集合并拥有一个连到原型对象的隐藏连接。
2)对象字面量产生的对象连接到Object.prototype;
3)引用:对象通过引用来传递,他们永远不会被复制。
4)函数就是对象。
5)函数对象连接到Function.prototype(该原型的对象本身连接到Object.prototype)。
6)函数在创建的时候会附加2个隐藏属性:函数的上下文(包括函数实参、函数形参、内嵌函数、内部变量等)和实现函数行为的代码
Object
- proto: Object
- constructor: function Object()
- hasOwnProperty: function hasOwnProperty()
- isPrototypeOf: function isPrototypeOf()
- propertyIsEnumerable: function propertyIsEnumerable()
- toLocaleString: function toLocaleString()
- toString: function toString()
- valueOf: function valueOf()
反射
检查对象并确定对象有什么属性是很容易的事情,只要试着去检索该属性并验证取得的值,typeof操作符对确定属性的类型很有帮助。
1)检查属性的类型:typeof
typeof flight.number //'number'
typeof flight.status //'string'
typeof flight.manifest //'undefined'
请注意原型链中的任何属性也会产生一个值:
typeof flight.toString //'function'
typeof flight.constructor //'function'
2)检查属性:hasOwnProperty
flight.hasOwnProperty('number') //true
flight.hasOwnProperty('constructor') //false
第四章:函数
1)除了声明时定义的形式参数,每个函数还接收2个附加的参数:this和arguments
2)一个函数总会返回一个值,如果没有指定返回值,则返回undefined。如果函数调用时在前面加上了new前缀,且返回值不是一个对象,则返回this。
函数字面量:可以通过函数字面量来创建:
包括4个部分:
1
//创建一个名为add变量,并用来把两个数字相加的函数赋值给它
var add=function(a,b){
return a+b;
}
【this】
this在JS中有4中调用模式:
①方法调用模式:当一个函数被保存为对象的一个属性时,就称它是一个方法。当一个方法被调用时,this被绑定到该对象。
②函数调用模式:当一个函数并非一个对象的属性时,它就是被当做一个函数来调用。这个模式下的this被绑定到全局对象window,函数实际是window的属性。
③构造器调用模式:如果在一个函数前面带上new来调用,则背地里会创建一个连到该函数prototytpe成员的新对象,同时this会被绑定到那个新对象上。
④apply调用模式:允许选择this的值,apply第一个参数绑定给this的值,第2个参数是传给调用函数的参数数组。
第五章:继承
继承的两个作用:1、代码重用;2、类型系统规范。
当一个函数对象呗创建时,Functinon构造器产生的函数对象会运行类似下面的代码:
this.prototype={constructor:this};
新函数对象被赋予一个prototype属性,其值是包含一个constructor属性且属性值为该新函数的对象。该prototype对象是存放继承特征的地方。