javascript原型与原型链笔记

2017-07-31  本文已影响0人  我随便取的名

在实际编程中常常需要面向对象编程,如果你熟悉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 + '!');
};
上一篇 下一篇

猜你喜欢

热点阅读