MSDN 学习 js 高级教程 note
构造函数
使用构造函数定义类型(type)
概念
构造函数是一个为 Object 初始化一个特定类型的函数
使用 new 关键字调用构造函数
这里有一些 js 内建对象和自定义对象的例子
var myObject = new Object();
var myBirthday = new Date(1993, 11, 12);
var myCar = new Car();
构造函数包含 this 关键字,它是对新创建的空对象的引用(reference)
它通过创建属性并为他们赋初始值来初始化新对象
构造函数将返回对所创建对象的引用
function Circle(xPoint, yPoint, radius) {
this.x = xPoint;
this.y = yPoint;
this.radius = radius;
}
var aCircle = new Circle(5, 11, 99);
使用自定义构造函数创建的所有对象的类型都是 object
js 只有 6 中类型:object、function、string、number、boolean、undefined
typeof操作符以字符串形式返回类型信息
var index = 5;
var result = typeof index === "number";
var description = "abc";
var result = typeof description === "string";
true
true
为声明和未声明的变量测试 undefined 数据类型
var declared;
var result1 = typeof declared === "undefined";
console.log(result1);
var result2 = typeof notDeclared === "undefined";
console.log(result2);
var obj = {};
var result3 = typeof obj.propNotDeclared === "undefined";
console.log(result3);
true
true
true
var result = notDeclared === "undefined";
console.log(result);
Uncaught ReferenceError: notDeclared is not defined
未声明的变量不能用于比较
数组
Array.isArray(object)判断一个对象是否是一个数组
如果对象是一个数组则返回 true,如果对象不是一个数组或参数不是一个对象(object)则返回 false
创建数组方式:
arrayObj = new Array() arrayObj = new Array(size) arrayObj = new Array()
arrayObj 必需,Array 对象分配到的变量 size 可选,从 0 开始(包括 0)的整数,数组索引范围为[0,size-1] element 可选,数组内所放置的元素,这样会创建 n+1 个元素(n 为数组索引最大值),这种数组创建方式必需提供至少一个元素
var d = new Array("test", 3);
undefined;
d[("test", 3)];
var ar = [];
var result1 = Array.isArray(ar);
console.log(result1);
var ar = new Array();
var result2 = Array.isArray(ar);
console.log(result2);
var ar = [1, 2, 3];
var result3 = Array.isArray(ar);
console.log(result3);
var result = Array.isArray("an array");
console.log(result);
true
true
true
false
数组对象
Array 支持创建任何数据类型的数组
数组创建后,可通过[]表示法来访问每个独立的元素
js 数组从 0 开始
var my_array = new Array();
for (i = 0; i < 10; i++) {
my_array[i] = i;
}
x = my_array[4];
console.log(x);
console.log(my_array[10]);
4
undefined
可以传递一个无符号 32 位整数给 Array 构造函数类指定数组的大小
如果值为负或者非整数,会出现运行时错误
var arr1 = new Array(10);
console.log(arr1.length);
var arr2 = new Array(-1);
console.log(arr2);
arr3 = new Array(1.5);
console.log(arr3);
10
Uncaught RangeError: Invalid array length
Uncaught RangeError: Invalid array length
原型和原型继承
prototype 是函数的一个属性,同时也是由构造函数创建的对象(instance)的一个属性
函数的原型为对象,主要在函数用作构造函数时使用
使用原型添加属性和方法
可使用 prototype 属性向对象添加属性和方法,甚至于已创建的对象是也是如此
function Vehicle(wheels, engine) {
this.wheels = wheels;
this.engine = engine;
}
var testVehicle = new Vehicle(2, false);
Vehicle.prototype.color = "red";
var testColor = testVehicle.color;
console.log(testColor);
red
向预定义的对象添加属性和方法,例如:在 String 原型上定义一个 Trim 方法,脚本中所有的字符串都将继承该方法
String.prototype.trim = function () {
return this.replace(/(^\s*)|(\s*$)/g, "");
};
var s = " leading and trailing spaces ";
window.alert(s + "(" + s.length + ")");
s = s.trim();
window.alert(s + "(" + s.length + ")");
leading and trailing spaces(33)
leading and trailing spaces(27)
Nice, isn’t it?
使用原型通过 Object.create 从一个对象派生另一个对象
例如:;利用 Object.create 函将使之前定义的 Vehicle 对象的原型(以及所需的任何新属性)派生出一个新的对象 Bicycle
var Bicycle = Object.create(Object.getPrototypeOf(Vehicle), {
pedals: { value: true },
});
参考:https://msdn.microsoft.com/zh-cn/library/b9w25k6f(v=vs.94).aspx