本文是作者记录的笔记,以免以后忘记。参考博客廖雪峰。
function Person (name) {
this.name = name;
this.say = function () {
console.log('hello, my name is ' + this.name);
}
}
var person01 = new Person('asayao');
console.log(person01.__proto__ === Person.prototype);
console.log(person01.constructor === Person.prototype.constructor);
console.log(person01.constructor === Person);
console.log(Person.prototype.__proto__ == Object.prototype);
如上代码创建了一个Person的对象,其原型链是这样的:
person01 -----> Person ------> Object -----> null
person01 包含以下主要属性:__proto__
、constructor
Person 包含以下主要属性: prototype
、constructor
、proto
-
person01.__proto__ === Person.prototype
说明实例对象_proto指向该类的prototype -
person01.constructor === Person
说明实例对象指向该类 -
person01.constructor === Person.prototype.constructor
说明实例对象指向该类的constructor -
Person === Person.prototype.constructor
该类的construtor 指向该类
那么,现在,我们可以通过以下方式来继承函数:
function SuperMan(name, age) {
Person.apply(this, arguments);
}
inheritProperty(Man,Person);
var man1 = new Man('jax');
var man2 = new Man('ezer');
console.log(man1.say == man2.say);
console.log(man1.name == man2.name);
function inheritProperty(subType, superType) {
var prototype = Object.create(superType.prototype);//创建对象
prototype.constructor = subType;//增强对象
subType.prototype = prototype;//指定对象
}
解析此inheritProperty函数:
- 创建一个与父类相同的类型
- 该类指向子类
- 子类指向该类型
那么相当于拷贝了一份类型。随后通过此类型来继承即可。