如果我在构造函数中返回一些值或对象,var会得到什么?
function MyConstroctor()
{
//what in case when return 5;
//what in case when return someObject;
}
var n = new MyConstroctor();
Run Code Online (Sandbox Code Playgroud)
在这两种情况下会得到什么?
实际上它是一个测验问题,答案是什么?
从自定义对象构造函数返回什么?
a)新实例化的对象
b)未定义 - 构造函数不返回值
c)返回语句
是什么d)返回语句是什么; 如果没有return语句,则新实例化的对象
Tri*_*ych 65
构造函数返回 this对象.
function Car() {
this.num_wheels = 4;
}
// car = { num_wheels:4 };
var car = new Car();
Run Code Online (Sandbox Code Playgroud)
通过Javascript规范,当调用函数时new,Javascript创建一个新对象,然后将该对象的"构造函数"属性设置为调用的函数,最后将该对象分配给该名称this.然后,您可以访问this该函数体的对象.
一旦执行了函数体,Javascript将返回:
如果函数手动返回一个对象,则为任何对象:
function Car(){
this.num_wheels = 4;
return { num_wheels:37 };
}
var car = new Car();
alert(car.num_wheels); // 37
Run Code Online (Sandbox Code Playgroud)
object函数没有this语句的对象,或者函数返回的类型不是return
function Car() {
this.num_wheels = 4;
return 'VROOM';
}
var car = new Car();
alert(car.num_wheels); // 4
alert(Car()); // No 'new', so the alert will show 'VROOM'
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 40
基本上,如果你的构造函数返回一个原始值,比如string,number,boolean,null或undefined,(或者你不返回任何等同于返回的东西undefined),将返回一个从构造函数继承的新创建的对象prototype.
this当使用new关键字调用时,这是您在构造函数内使用关键字访问的对象.
例如:
function Test() {
return 5; // returning a primitive
}
var obj = new Test();
obj == 5; // false
obj instanceof Test; // true, it inherits from Test.prototype
Test.prototype.isPrototypeOf(obj); // true
Run Code Online (Sandbox Code Playgroud)
但是如果返回的值是对象引用,那将是返回的值,例如:
function Test2() {
this.foo = ""; // the object referred by `this` will be lost...
return {foo: 'bar'};
}
var obj = new Test2();
obj.foo; // "bar"
Run Code Online (Sandbox Code Playgroud)
如果您对new运算符的内部感兴趣,可以检查[[Construct]]内部操作的算法,负责创建从构造函数的原型继承的新对象,并决定返回的内容:
当使用可能为空的参数列表调用对象的[[Construct]]内部方法时,将执行以下步骤:FunctionF
obj是一个新创建的原生ECMAScript的对象.obj8.12中指定的所有内部方法.[[Class]]内部属性.obj"Object"[[Extensible]]内部属性.objtrue[[Get]]内部属性的值.F"prototype"Type(proto)是Object , set the[[Prototype]]`obj到proto的内部属性.Type(proto)不是Object,则将[[Prototype]]obj 的内部属性设置为标准内置Object原型对象,如15.2.4中所述.[[Call]F 的] internal属性的结果,提供obj作为this值并提供[[Construct]]作为args 传递的参数列表.Type(result)是Object则返回结果.obj.Hai*_*vgi 20
我找到了这个很棒的链接:
上面提到的第二个魔法是构造函数返回特定的,可能是预先存在的对象的能力,而不是对新实例的引用.这将允许您在需要时自己管理实际实例的数量; 可能是因为资源有限或诸如此类的原因.
var g_deebee = new Deebee();
function Deebee() { return g_deebee; }
var db1 = new Deebee();
var db2 = new Deebee();
if (db1 != db2)
throw Error("JS constructor returned wrong object!");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23338 次 |
| 最近记录: |