原型式继承和寄生式继承

版权声明:如果觉的本文好的话,点个赞,您的鼓励是我最大的动力。 https://blog.csdn.net/boysky0015/article/details/89386653

6.3.4原型式继承

function object17(obj) {
    //自定义一个构造函数
    function Person17(){}
    //把传入的obj对象赋给 构造函数的原型
    //这样原型方法中有了共有的属性
    Person17.prototype = obj;
    return new Person17();
}
var person17 = {
    name: '风云突变',
    colors: ['red','blue','green'],
}

object17(person17) 发生了什么???

  1. 定义一个构造函数Person17
  2. 把传入的对象赋给构造函数的原型
  3. 返回构造函数的一个实例
//执行完object17(person17),返回的是一个实例,实例的__proto__属性指向 原型方法
var anotherPeron17 = object17(person17);
console.log('anotherPeron17',anotherPeron17); //因此这个打印出来的结果 就一目了然了。

打印的结果如下:

Person17 {}
__proto__:
	colors: (3) ["red", "blue", "green"]
	name: "风云突变"
	__proto__: Object

在进行到这一步,我们会发现anotherPeron17 === yetanotherPerson17,不信大可一试

console.log('anotherPeron17 === yetanotherPerson17',anotherPeron17 == yetanotherPerson17); //true

明白了,两个实例应该不会相等,我们可以验证一下

function Person18() {
    this.name = 'tianxia';
}
var person181 = new Person18();
var person182 = new Person18();

//经验证果然是不相等的
console.log('person181',person181==person182);

因此这个也是false

console.log(anotherPeron17 == yetanotherPerson17); //false

扩展知识:
引用类型和值类型的区别

猜你喜欢

转载自blog.csdn.net/boysky0015/article/details/89386653