JavaScript不區(qū)分類和實例的概念 而是通過原型(prototype)來實現(xiàn)面向?qū)ο缶幊?/h4>
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};
var xiaoming = {
name: '小明'
};
xiaoming.__proto__ = Student;
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區(qū)別就在孝凌,它沒有“Class”的概念陈轿,所有對象都是實例,所謂繼承關(guān)系不過是把一個對象的原型指向另一個對象而已赌结。
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原型創(chuàng)建一個新對象:
var s = Object.create(Student);
// 初始化新對象:
s.name = name;
return s;
}
var xiaoming = createStudent('小明');
xiaoming.run(); // 小明 is running...
xiaoming.__proto__ === Student; // true