构造函数、实例、原型对象三者的关系,整理一下

一、构造函数、实例、原型对象三者之间的关系
  function Person(o){
    this.name=o.name;
    this.age=o.age;
    this.sex=o.sex;
    this.init();
}
Person.prototype.init = function(){
  console.log("构造函数执行");
}
Person.prototype.say = function(){
  console.log("你好" + this.name);
}
var p=new Person({
    name:"Tom",
    age: 10,
    sex:"男"
});
p.say();   

console.log(1,Person)
console.log(2,Person.prototype)
console.log(3,Person.prototype.constructor)
console.log(4,p)
console.log(5,p.__proto__);
console.log(6,p.__proto__.constructor)

Person.png

从打印内容可以看出

Person = Person.prototype.constructor = p.__proto__.constructor
Person.prototype === p.__proto__

console.log(7,Person === Person.prototype.constructor);  // true
console.log(8,Person === p.__proto__.constructor);  // true 
console.log(9,Person.prototype === p.__proto__)  // true

它们之间的关系图如下


构造函数关系图.png
二、原型链
原型.png

有了上面的关系图,我们下来看下这道题,看看输出什么

function Foo(){
    Foo.a = function(){
        console.log(11);
    }
    this.a = function(){
        console.log(12);
    }
}

Foo.prototype.a = function(){
    console.log(13);
}
Foo.a = function(){
    console.log(14);
}

Foo.a();
let obj = new Foo();
obj.a();
Foo.a();  
如果希望上面打印全都输出,应如何修改代码?欢迎留言评论。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容