1- 构造函数
<script>
// 构造函数
function Person(name1,age1){
this.name = name1;
this.age = age1;
this.sayName = function(){
console.log(this.name);
}
}
var p1 = new Person("bizhenyu",18);
p1.sayName()
var p2 = new Person("b1zhenyu",19);
console.log(p1,p2);
// p1是实例对象
// p1.__proto__.constructor 实例对象对应的构造函数
console.log(p1.__proto__.constructor);
console.log(p1.constructor);
</script>
一、构造函数中有this指针
二、使用构造函数创建实例时必须使用new
p1.__proto__.constructor == p1.constructor
三、原型的constructor与实例的constructor同时指向构造函数
2- 原型
<script>
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.type="human";
Person.prototype.sayName=function(){
console.log("我的名字是",this.name);
}
var p1 =new Person("张三",18);
var p2 =new Person("张八",15);
console.log(p1,p2);
p1.sayName();
p2.sayName();
var temp = p1.type;
console.log(temp);
</script>
一、首先创建构造函数
function Person(name,age){
this.name = name;
this.age = age;
}
二、其次定义原型中的属性和方法
Person.prototype.type="human";
Person.prototype.sayName=function(){
console.log("我的名字是",this.name);
}
三、创建实例
var p1 =new Person("张三",18);
var p2 =new Person("张八",15);
四==>实例可以调用原型的属性和方法
var temp = p1.type;
console.log(temp);
p1.sayName();
p2.sayName();
3- 构造函数查找属性的过程
// 1-->p1会在自己身上找
// 2-->创建p1的构造函数的原型上找(原型是对象)
// 3-->原型的原型上找
// 4-->null-->undefined
4- 原型链
<script>
function Person(name){
this.name = name;
}
Object.prototype.b = "Object原型的属性"
Person.prototype ={
a:'Person原型的属性',
name:'xxx'
}
var p = new Person("bizhenyu");
console.log(p);
console.log(p.name);
console.log(p.a);
console.log(p.b);
var a = Person.prototype.__proto__
console.log(a);
p.name='我是我,我是实例,我改了我的name,与原型无关'
console.log(Person.prototype.name);
console.log(p.name);
</script>
一、首先创建构造函数
function Person(name){
this.name = name;
}
二、其次创建原型对象(原型)
Person.prototype ={
a:'Person原型的属性',
name:'xxx'
}
三、创建构造函数的原型的原型
Object.prototype.b = "Object原型的属性"
四、创建实例
var p = new Person("bizhenyu");
五、第一次输出打印
console.log(p);
console.log(p.name);
![]()
console.log(p.a);
![]()
console.log(p.b);
![]()
六、创建a,原型的原型,打印输出看看有啥
var a = Person.prototype.__proto__
console.log(a);
七、关键点:在实例中修改属性,不会对原型属性产生影响
p.name='我是我,我是实例,我改了我的name,与原型无关'
console.log(Person.prototype.name);
console.log(p.name);
![]()