一、构造函数、实例、原型对象三者之间的关系
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();
如果希望上面打印全都输出,应如何修改代码?欢迎留言评论。
网友评论