《精通JavaScript》笔记
一、类型判断
1. typeof obj
2. obj.constructor
所有的javascript 对象都带有一个属性,称为构造函数(constructor)。
这一属性引用的是原本构造该对象的那个函数。
function User( name) { this.name = name; }; var BillGates = new User( "Bill Gates" ); alert( BillGates.constructor == User ); // true
二、方法
1.公共方法
function User(){}; User.prototype.getName = function(){};// public method
2.私有方法
function User(){ function fn(){}; // private method }
3.特权方法
function User(){ var age; // private variable
// privileged method this.getAge = function() { return age; }; }
特权方法是在创建对象时才动态添加的,开销比 公共方法(prototype下的方法)大很多,但因其动态生成,其灵活性更强。
function User(config) { for (key in config) { this.get[key] = function(){}; // 动态指定方法名 } }
4.静态方法
User.fn = function(){}
静态方法不能被实例化对象引用
var user= new User();
user.fn();// wrong
User.fn();// right
三、作用域
在 JavaScript 里, 作用域是由函数划分的, 而不是由块(block)划分(例如:while, if 和 for 语句)的。
四、闭包
1.闭包意味着内层函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经终止。
2.闭包允许你引用父函数中的变量,但提供的值并非该变量创建时的值,而是副函数范围内的最终值。也就是说引用的是个常量,最终常量。
3.可以在函数内使用匿名自执行函数来解决上面的问题。
五、上下文对象 (this)
1.在 JavaScript 中,你的代码总是有一个上下文对象this(你的代码处在该对象内)。
2.换句话说,this总是指向当前代码所处的对象中。
3.也就是说 this 是动态的对象引用,谁调用代码就指向谁。如:
function show(){ console.log(this); } show(); // this指向Window obj = {}; obj.show = show; obj.show(); // this指向obj
4.代码变得不好懂了,幸运的是JavaScript提供了两个方法(call和apply)来易于理解,其第一个参数就表示this的指向。
function show(){ console.log(this); } show(); // this指向Window obj = {}; show.call(obj); // this 指向obj
浙公网安备 33010602011771号