根据:译者简要介绍新的,更多介绍原型,值得一读。
原创: 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,如果有,就不会在原型中查找。
摘要
也许这些概念对你来说有点太多了,但是当你理解它们时,使用原型可以让你编写更高效的代码。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。