对象
-
概念
首先是javaScript的对象概念,与java不同,javaScript的对象是一种复合值:将很多值(原始值或者其他对象)聚合在一起,可通过名字去访问这些值。并且可以将对象看成是属性的无序集合,每一个属性都是一个名/值对。
-
原型继承
JavaScript中的对象除了可以保持自有的属性,JavaScript对象还可以从原型对象中继承属性。对象的方法通常是继承的属性。
原型
-
概念
JavaScript的对象都有一个内置的[[Prototype]]私有属性,这个属性指向另一个对象,我们称这个对象为原对象的原型。当JS引擎访问obj的toString属性时,首先会去obj对象查找,发现找不到,就沿着obj的[prototype]属性去他的原型上查找。
-
作用
在JavaScript中,prototype对象是实现面向对象的一个重要机制。每个函数就是一个对象(Function),函数对象都有一个子对象prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。
原型链
-
概念
每个函数都有一个原型对象,函数都包含一个指向原型对象的指针。我们让原型对象的实例(1)等于另一个原型对象(2),此时原型对象(2)将包含一个指向原型对象(1)的指针,再让原型对象(2)的实例等于原型对象(3),如此层层递进就构成了实例和原型的链条,这就是原型链的概念。
构造函数
-
注意事项
- 默认函数首字母大写
- 构造函数并没有显示返回任何东西。new 操作符会自动创建给定的类型并返回他们,当调用构造函数时,new会自动创建this对象,且类型就是构造函数类型。
- 也可以在构造函数中显示调用return.如果返回的值是一个对象,它会代替新创建的对象实例返回。如果返回的值是一个原始类型,它会被忽略,新创建的实例会被返回。
-
函数格式
function Person( name){
this.name =name;
}
var p1=new Person('John');
//因为构造函数也是函数,所以可以直接被调用,但是它的
//返回值为undefine,此时构造函数里面的this对象等于全局this对象。
- 在构造函数中使用原型对象
//比直接在构造函数中写的效率要高的多
Person.prototype.sayName= function(){
console.log(this.name);
};
this关键字
- 在方法中,this 表示该方法所属的对象。
- 如果单独使用,this 表示全局对象。
- 在函数中,this 表示函数的所有者(object Window)
- 在函数中,在严格模式下,this 是未定义的(undefined)。
- 在事件中,this 表示接收事件的元素。
闭包
- 定义
当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。 - demo
function A(){
function B(){
console.log('Hello Closure!');
}
return B;
}
var C = A();
C();
- 作用
在 Javascript 中,如果一个对象不再被引用,那么这个对象就会被 GC 回收,否则这个对象一直会保存在内存中。在上述例子中,B 定义在 A 中,因此 B 依赖于 A ,而外部变量 C 又引用了 B , 所以A间接的被 C 引用。也就是说,A 不会被 GC 回收,会一直保存在内存中。