JS基础 原型对象

在了解原型对象前需要先了解以下问题:

1、什么是构造函数

在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。构造函数首字母一般大写

2、为什么要使用构造函数?

比如我们现在想要记录一些班级学生信息

var p1 = { name: 'zs', age: 6, gender: '男', hobby: 'basketball' };
var p2 = { name: 'ls', age: 6, gender: '女', hobby: 'dancing' };
var p3 = { name: 'ww', age: 6, gender: '女', hobby: 'singing' };
var p4 = { name: 'zl', age: 6, gender: '男', hobby: 'football' };

但是我们会发现,其实很多学生的属性是重复的,这样会导致很多代码浪费,这时就用到了构造函数。

function Person(name, gender, hobby) {
    this.name = name;
    this.gender = gender;
    this.hobby = hobby;
    this.age = 6;
}
var p1 = new Person('zs', '男', 'basketball');
var p2 = new Person('ls', '女', 'dancing');
var p3 = new Person('ww', '女', 'singing');
var p4 = new Person('zl', '男', 'football');

我们将 重复的属性封装到函数中,然后通过构建函数将学生信息录入。

注意:

一).当this以普通函数调用时,this指向window

二).当this通过构造函数调用时,this指向构造的函数对象实例

 对象的属性已经解决了,但是对象内部的方法却很棘手

function Person(name,gender,hobby){
        this.name=name;
        this.gender=gender;
        this.hobby=hobby;
        this.sayName=function(){
          alert('hello我是'+ this.name);
        }
      }

我们每创建一个实例,就会调用一次sayName方法,这样非常浪费空间。这时原型prototype的出现就很有必要。

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype, MyClass函数中存在显性属性prototype,通过MyClass创建的实例存在隐性属性,可以通过__proto__来访问,并且他们都指向同一块内存空间。

function Person(name,gender,hobby){
        this.name=name;
        this.gender=gender;
        this.hobby=hobby;
      }
      Person.prototype.sayHello=function(){
        alert('hello');
      }

      let p1 = new Person('张三','男','学习');
      p1.sayHello();

这样通过Person创建的实例对象都会具有sayHello的方法。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值