宝哥软件园

JavaScript精炼构造函数和构造函数属性的详细解释

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

除了创建对象,构造函数还做了另一件有用的事情——为创建的新对象自动设置原型对象。原型存储在ConstructorFunction.prototype属性中。

例如,如果我们重写前面的示例,并使用构造函数创建对象“b”和“c”,那么对象“a”将扮演“Foo.prototype”的角色:

//构造函数function Foo(y) {//构造函数会以特定的模式创建对象:所有创建的对象都会有一个' y '属性this.y=y}//“foo . prototype”存储新创建的对象的原型引用//,因此我们可以使用它来定义继承和共享属性或方法//因此,与上面的示例一样,我们有以下代码://Inherit属性“x ' foo . prototype . x=;//继承方法“calculate”foo . prototype . calculate=function(z){ return this . xthis . y z;};//使用foo模式创建“b”和“c”var b=new Foo();var c=new Foo();//调用继承的方法b . calculate();//c . calculate();////让我们看看是否使用了预期的属性console . log(b . _ _ proto _===foo . prototype,//true c . _ _ proto _==foo . prototype)。//true //'Foo.prototype '自动创建一个特殊属性' constructor' //指向a//实例' b '和' c '的构造函数本身可以通过授权找到它,并使用它来检测自己的构造函数b.constructor===Foo。//true c.constructor===Foo,//true Foo . prototype . constructor===Foo//true b . calculate===b . _ _ proto _ _。计算,//true b.__proto__。calculate===Foo . prototype . calculate//true);上述代码可以表示为以下关系:

构建函数和对象之间的关系。

从上图可以看出,每个物体都有一个原型。构造函数Foo也有自己的__proto__即Function.prototype,Function.prototype的__proto__指向Object.prototype同样,Foo.prototype只是一个显式属性,即B和c的_ _ prototo

对这个问题的完整而详细的解释有两个部分:

OOP。一般理论描述了不同的OOP范式和风格,并与ECMAScript进行了比较。

哦。ECMAScript实现,它专门描述了ECMAScript中的面向对象编程。现在我们已经理解了对象的基本原理,我们来看看ECMAScript中的[运行时程序执行]环境,通常称为“[执行上下文堆栈]”。每个元素都可以抽象地理解为一个对象。你可能已经注意到,是的,在ECMAScript中,你几乎可以在任何地方看到对象。

下面是对JavaScript构造函数属性的详细解释。

对象的构造函数属性用于返回创建对象的函数,该函数通常称为构造函数。

在JavaScript中,每个原型对象都会自动获得构造函数属性。除了一些特殊对象,如参数、枚举器、错误、全局、数学、正则表达式和正则表达式,所有其他JavaScript内置对象都有构造函数属性。例如:数组、布尔值、日期、函数、数字、对象、字符串等。所有主要的浏览器都支持这个属性。

语法

对象.构造函数

返回值

对象的构造函数属性返回对创建该对象的函数的引用。

示例描述

下面代码中的【原生代码】表示是JavaScript的底层内部代码实现,无法显示代码细节。

//字符串:String()var str='张三;文件。writeln(str。建造师);//函数String(){[本机代码]}文档。writeln(str。构造函数===String);//true/数组:Array()var arr=[1,2,3];文件。writeln(arr。建造师);//函数Array(){[本机代码]}文档。writeln(arr。构造函数===Array);//true/数字:Number()var num=5;文件。writeln(num。建造师);//函数Number(){[本机代码]}文档。writeln(num。构造函数===Number);//true/自定义对象:人()函数Person(){ this。名称=' CodePlayer} var p=new Peer();文件。writeln(p . constructor);//函数Person(){ this。名称=' CodePlayer}文档。writeln(p . constructor===Person);//true//JSON对象:Object()var o={ 'name' : '张三'};文件。writeln(o . constructor);//函数Object(){[本机代码]}文档。writeln(o .构造函数===Object);//true/自定义函数:Function()Function foo(){ alert(' CodePlayer ');}文档。writeln(foo。建造师);//Function Function(){[本机代码]}文档。writeln(foo。构造函数===函数);//true/函数的原型:bar()函数bar(){ alert(' CodePlayer ');}文档。writeln(酒吧。原型。建造师);//function bar(){ alert(' CodePlayer ');}文档。writeln(酒吧。原型。构造函数===bar);//真

更多资讯
游戏推荐
更多+