在实际编程中常常需要面向对象编程,如果你熟悉c++你就知道可以写一个类,对象可以继承类的属性和功能。其实javascript也有类似的用法,不过概念不同,它不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。
跟着大神学习(廖雪峰的javascript教程)
__ proto __: 可以将对象指向指定原型
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};
var xiaoming = {
name: '小明'
};
xiaoming.__proto__ = Student;
原型链
JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。
例如,创建一个Array对象:
var arr = [1, 2, 3];
原型链为:arr ----> Array.prototype ----> Object.prototype ----> null
举例来说,如果你定义了一个数组对象,它指向Array原型,之后你就可以使用javascript已经定义好的功能了(封装在Array中),比如arr.length等等。
大多数情况下我们需要定义一个构造函数,需要我们自己定义的对象可以使用构造函数的功能。那要怎么写呢?
看例子:
function Student(name) {
this.name = name;
this.hello = function () {
alert('Hello, ' + this.name + '!');
}
}
var xiaoming = new Student('小明');
xiaoming.name; // '小明'
xiaoming.hello(); // Hello, 小明!
首先写一个构造函数(Student-----ps:按照规则构造函数首字母大写),然后定义一个对象用new指向构造函数,现在就可以使用构造函数里面的功能了。
原型链:
prototype: 原型
constructor: 构造器
为节约内存,可以直接把共同的函数写在对象共同的原型上,也就是Student.prototype
例如上面的例子可以改为:
function Student(name) {
this.name = name;
}
Student.prototype.hello = function () {
alert('Hello, ' + this.name + '!');
};