javascript面向对象精要[摘]

0.数据类型

javaScript 有两种数据类型: 原始类型和引用类型。原始类型保存为简单类型。引用类型则保存为对象,其本质是指向内存位置的引用。

javaScript共有5种原始类型:boolean、number、string、null、undefined.

typeof null 的值为 ‘obejct’, 逻辑上可以认为null是一个空的对象指针(设计错误),判断是否为空类型的最佳方法是直接和null比较,使用 ‘===’。

javaScript提供3种原始封装类型:String、Number、Boolean。javaScript会在背后创建这些对象,使得能够像普通对象那样使用原始值,但这些临时对象在使用它们的语句结束时就会被立即销毁。

1
2
3
4
5
6
7
8
9
10
var a = 'test';
var b = a.charAt(0);
console.log(b); // 't'
//在背后发生的事情
var a = 'test';
var temp = new String(a);
var b = temp.charAt(0);
temp = null;
console.log(b); // 't'

1.函数

在javascript中,函数也是对象,区别于其他对象的特征就是在函数内存在一个被称为[[Call]]的内部属性,任何具有该熟悉的对象,在使用typeof时,都会返回’function’。

函数声明相比函数表达式,不同的是函数声明会被提升至上下文顶部。

1
2
3
4
5
var result = sum(1, 1);
function sum(a, b){
return a + b;
}

函数的参数会被保存在一个称为arguments的类型数组的对象中,该对象并不是数组的实例,其拥有的方法和数组的不一样,且Array.isArray(arguments)始终返回false。

2.原型对象

原型对象被保存在对象实例内部的[[Prototype]]属性中,这个属性是一个引用而不是一个副本。基于javascript查找属性的机制,任何对原型对象的修改都会立即出现在所有对象实例中。当查找属性时,若在自有属性中没找到则会查找原型属性。

内建对象也有可以被修改的原型对象,但不建议在生产环境中使用。

1
2
3
4
5
6
7
8
9
10
// 修改内置对象
Object.prototype.test = function(){}
var a = {t:1}
for (var i in a){
console.log(i); // 可以使用hasOwnProperty判断来避免
}
// t
// test