[JavaScript基础]学习②④--面向对象编程

JavaScript不区分类和实例的概念 而是通过原型(prototype)来实现面向对象编程

var Student = {
    name: 'Robot',
    height: 1.2,
    run: function () {
        console.log(this.name + ' is running...');
    }
};

var xiaoming = {
    name: '小明'
};

xiaoming.__proto__ = Student;

xiaoming的原型指向了对象Student

xiaoming.name; // '小明'
xiaoming.run(); // 小明 is running...

JavaScript的原型链和Java的Class区别就在,它没有“Class”的概念,所有对象都是实例,所谓继承关系不过是把一个对象的原型指向另一个对象而已。

xiaoming的原型指向其他对象

var Bird = {
    fly: function () {
        console.log(this.name + ' is flying...');
    }
};

xiaoming.__proto__ = Bird;
xiaoming.fly(); // 小明 is flying...   run失效

不要直接用obj.proto去改变一个对象的原型 而是用Object.create()方法

// 原型对象:
var Student = {
    name: 'Robot',
    height: 1.2,
    run: function () {
        console.log(this.name + ' is running...');
    }
};

function createStudent(name) {
    // 基于Student原型创建一个新对象:
    var s = Object.create(Student);
    // 初始化新对象:
    s.name = name;
    return s;
}

var xiaoming = createStudent('小明');
xiaoming.run(); // 小明 is running...
xiaoming.__proto__ === Student; // true

你可能感兴趣的:([JavaScript基础]学习②④--面向对象编程)