javascript - 使用类和使用原型创建对象的问题

查看:359
本文介绍了javascript - 使用类和使用原型创建对象的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

  1. 描述你的问题

当使用类创建对象时,对象里面的方法不相等

function Student (name,age,sex) {
    this.name = name;
    this.age  = age;
    this.sex  = sex;
    this.say = function () {
        alert("say:hello");
    }
}
var a = new Student("father","22","female");
var b = new Student("mather","23","male");
console.log(a.say == b.say);//false

而用原型创建两个对象时,对象的方法又相等。

function Teacher () {
}
Teacher.prototype.name = "mother";
Teacher.prototype.age = "30";
Teacher.prototype.sex = "female";
Teacher.prototype.say = function () {
    alert(this.name + "say hello");
}
var t1 = new Teacher();
var t2 = new Teacher();
alert(t1.say == t2.say);//true

这是为什么?能从内存的角度讲一下吗?
其实原型那里我懂..就是第一个不太清楚

解决方案

当我们new一个对象的时候,系统会给你创建一个新的对象,然后构造函数是你new的那个函数,也就是你写的 student和teacher,这时构造函数的执行上下文是新创建的对象也就是说,构造函数里的this就是你新创建得对象,在构造函数里执行了this.xx = xx ,所以你new出来的对象会有在构造函数函数体里赋的值,你new了两次,就分别声明了两次function给你new出来的对象,所以第一个例子里他俩不一样,因为那哥俩是两次声明的,虽然长的一样

第二个为啥一样呢,因为原型链,简单的说原型链是啥,就是个对象,每个函数的prototype属性都指向一个对象,这个对象上有方法也有属性,当我们new出来的对象要执行某个方法时,会先看自己有没有这个方法如果没有会沿着原型链一直找,找到就执行他,找不到就再找,最后找不到就出错了,所以第二个相等是因为他们都是原型链上的方法,而这个方法是一个对象上的一个方法,所以相等

大概就是这样吧

说的不太严谨,建议自行查一下原型链是怎么回事…

这篇关于javascript - 使用类和使用原型创建对象的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆