javascript面向对象编程学习(一)javascript
每一个构造函数都有一个原型对象
prototype
,原型对象包含一个指向构造函数的指针constructor
,而实例都包含一个指向原型对象的内部指针__proto__
。咱们能够利用它们的关系,实现原型链继承!java
function Person(name) {
this.name = name;
this.names = ['大魔王']
}
Person.prototype.say = function() {
console.log('my name is ' + this.name);
}
function Child() {}
const person = new Person('大魔王');
// Child的原型对象被更改成person实例
Child.prototype = person;
Child.prototype.getName = function() {
console.log(this.name);
}
Child.prototype.getNames = function() {
console.log(this.names)
}
var child = new Child();
child.say(); // my name is 大魔王
child.getName(); // 大魔王
复制代码
在上图能够看到,
构造函数Child
的原型对象prototype
被修改成person
实例,
child
实例经过__proto__
指向Child
的原型对象,即person
实例。编程
console.log(Child.prototype === person) // true
console.log(child.__proto__ === person) // true
复制代码
使用原型建立对象会存在多个实例对引用类型的操做
会被篡改的问题,以下:函数
child.names.push('我不是大魔王');
child.getNames(); // ["大魔王", "我不是大魔王"]
var child2 = new Child();
child2.getNames(); // ["大魔王", "我不是大魔王"]
复制代码
child
和child2
两个实例的names
属性指向相同,操做其中一个,另外一个也会被影响。post
有错误请指出,你们互相学习学习