原型与原型链、原型模式创建对象

创建对象

  • 工厂模式
function createPerson(name,age,job){
  let o=new Object();
  o.name=name;
  o.age=age;
  o.job=job;
  o.sayName=function(){
    console.log(this.name);
  }
  return o;
}
let person1=createPerson("lu1",20,"student");
let person2=createPerson("lu2",20,"teacher");
  • 构造函数模式
function Person(name,age,job){
  this.name=name;
  this.age=age;
  this.job=job;
  this.sayName=function(){
    console.log(this.name);
  }
}
let person1=new Person("lu1",20,"student");
let person2=new Person("lu2",20,"teacher");

- 原型模式

function Person(){
    Person.prototype.name='lu';
    Person.prototype.age=20;
    Person.prototype.job='student';
    Person.prototype.sayName=function(){
      console.log(this.name);
    }
  }
  let person1=new Person();
  let person2=new Person();
  //如果再实例上添加了一个与原型对象中同名的属性,那么就会在实例上创建这个属性,这个属性会遮住原型对象上的属性。
  person1.name="Greg";
  console.log(person1.name);//Greg,来自实例
  console.log(person2.name);//lu,来自原型
  //即使在实例上把这个属性设置为null,也不会恢复它和原型的联系,只有通过delete操作符完成删除实例上的这个属性。
  delete person1.name;
  console.log(person1.name);//lu,来自原型例
原型与原型链
  • 构造函数有一个prototype属性,引用其原型对象,而这个原型对象也有一个constructor属性,引用这个构造函数。
  • 通过_proto_属性可以访问每个对象的原型,而prototype 是属于一个函数特有的属性。
  • 实例域构造函数没有直接联系,与原型对象有直接联系。
  • 构造函数的原型属性 prototype指向了原型对象,在原型对象有的属性和方法,构造函数构造出的实例都可以继承共享。
  • 构造函数、原型对象、实例是3个完全不同的对象。
Person===Person.prototype.constructor;
Person.prototype._proto_===Object.prototype;
Person.prototype._proto_.constructor====Object;
Person.prototype._proto_._proto_===null;
person1._proto_.constructor===Person;
person1._proto_===person2._proto_;//同一个构造函数创建的两个实例共享同一个原型对象

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值