宝哥软件园

JavaScript初学者必看“新”

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

根据:译者简要介绍新的,更多介绍原型,值得一读。

原创: JavaScript初学者:“新”运算符

翻译: Fundebug

为了保证可读性,本文采用意译代替直译。另外,本文版权归原作者所有,翻译仅供学习

当您使用new时,您将:

1.创建一个新的空对象;2.将此绑定到对象;3.添加一个名为__proto__的新属性并指向原型);构造函数的。4.返回这个这个对象。

如果你特别不理解,那我们就用例子详细解释一下。首先,定义一个构造函数Student,它接收两个参数,名字和年龄。

函数学生(姓名、年龄){ this.name=namethis.age=年龄;}现在我们使用new创建一个新对象:

var first=新学生(' John ',26);到底发生了什么?

1.创建一个新的对象,我们称之为obj;2 .这与obj绑定,任何对此的引用都是对obj的引用;3._ _ proto _ _属性被添加到obj对象中。Obj。__原型_ _指向Student.prototype;4.obj对象被分配给第一个变量。

我们可以通过打印测试:

console . log(first . name);//johnconsole . log(first . age);//26让我们仔细看看__proto__发生了什么。

原型

每个JavaScript对象都有一个原型。所有对象都从其原型继承对象和属性。

打开浏览器开发者控制面板(windows : ctrl shift j)(MAC : cmd选项j)并输入之前定义的Student函数:

函数学生(姓名、年龄){ this.name=namethis.age=年龄;}要验证每个对象都有原型,请输入:

学生原型;//对象{.}您将看到返回了一个对象。现在让我们尝试定义一个新对象:

var second=新生(' Jeff ',50岁);根据前面的解释,second指向的对象会有一个__proto__属性,应该指向父亲的原型。让我们测试一下:

其次。_ _ proto _ _===Student.prototype//true Student . prototype . constructor将指向student的构造函数,让我们打印出来看看:

student . prototype . construter;//函数Student(姓名、年龄){//this . name=name;//this.age=年龄;//}事情好像越来越复杂了。让我们用图片来描述它们:

学生的构造函数有一个名为的属性。原型,它又有一个属性。指向学生构造的构造函数。它们形成一个环。当我们使用new创建一个新对象时,每个对象都有。__proto__属性,该属性又指向Student.prototype

这个设计对于传承非常重要。因为原型对象由该构造函数创建的所有对象共享。当我们向原型对象添加函数和属性时,可以使用所有其他对象。

在本文中,我们只创建两个学生对象。如果我们创建20,000个,将属性和函数放在原型中而不是每个对象中,将节省大量存储和计算资源。

让我们看一个例子:

student . prototype . SayInfo=function(){ console . log(this . name '是' this . age ' age ' age ');}我们在student的原型中添加了一个新的函数sayinfo因此所有用Student创建的Student对象都可以访问这个函数。

second . SayInfo();//Jeff 50岁创建一个新的学生对象并再次测试:

var第三名=新生(' Tracy ',15岁);//如果现在打印第三张,仍然可以访问sayInfo函数,//即使只看到年龄和名字的属性。第三;//学生{姓名: 'Tracy ',年龄: 15 }第三名. sayinfo();//Tracy 15岁在JavaScript中,首先检查当前对象是否有这个属性;如果不是,请查看原型中是否存在该属性。此规则将继续,直到成功找到属性或未找到顶级全局对象并返回失败。

继承允许您直接使用toString()函数,而无需定义它。因为toString()内置在Object的原型中。我们创建的每个对象最终都指向Object.prototype,因此我们可以调用toString()。当然,我们也可以重写这个函数:

var name={ tostring : function(){ console . log('不是个好主意');}};name . ToString();not a good idea创建的name对象首先检查是否有toString,如果有,就不会在原型中查找。

摘要

也许这些概念对你来说有点太多了,但是当你理解它们时,使用原型可以让你编写更高效的代码。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+