Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在具有prototype属性的匿名对象上使用new?_Javascript_Class_Function_Object_Prototype - Fatal编程技术网

Javascript 在具有prototype属性的匿名对象上使用new?

Javascript 在具有prototype属性的匿名对象上使用new?,javascript,class,function,object,prototype,Javascript,Class,Function,Object,Prototype,我可以做: var foo = new Foo; 与: var Foo = { prototype : { } }; 正如我所说: var Foo = function() { }; ? 谢谢您的帮助。否,ìn新XX必须计算为函数 谢谢你的回答。我可以手动将其添加到构造函数中吗, 类似:{构造函数:{原型:{}};我不需要这么做, 我只是想了解力学 机制是它必须是一个函数,.constructor或.prototype属性根本不重要,事实上,你可以新建X,即使你删除.prototype属性

我可以做:

var foo = new Foo;
与:

var Foo = { prototype : { } };
正如我所说:

var Foo = function() { };
?


谢谢您的帮助。

否,ìn
新X
X
必须计算为函数


谢谢你的回答。我可以手动将其添加到构造函数中吗, 类似:{构造函数:{原型:{}};我不需要这么做, 我只是想了解力学

机制是它必须是一个函数,
.constructor
.prototype
属性根本不重要,事实上,你可以
新建X
,即使你
删除
.prototype
属性
X
,你真正需要的就是
X
成为一个函数

不,你不能

关键是
prototype
属性是构造函数的属性,在本例中是
Foo
。如果使用文本语法创建对象,例如

var foo = { prototype: {} };
您将属性指定给对象,而不是构造函数

这是一个区别,因此当使用这种文字语法时,原型对象上的自动查找将不起作用

如果要使用原型,必须使用构造函数语法,如下所示:

var Foo = function () {};
Foo.prototype.foo = 'bar';

var foo = new Foo();
console.log(foo.foo); // => 'bar'
正如在注释中所讨论的,如果您尝试以文本语法为对象分配
构造函数
属性,它也不起作用:它同样只在使用真正的原型时起作用

希望这有帮助。

不。

Foo是一个对象而不是一个函数。只能在函数上执行“new”(新建)

否。后面的值必须是可构造的(具有
[[construct]]
的对象),就像函数一样。不能使用任意对象

要从任意对象继承,请使用:

小提示:

function Fun() {};

var anonym = {};
var fun = new Fun;

anonym.prototype.p = function() {};
Fun.prototype.p = function(){};

'p' in anonym;  // false  
'p' in fun;     // true  (engine looks for properties in constructor's prototype object)

anonym.constructor.prototype.p = function() {};
'p' in anonym;  // true

谢谢你的回答。我是否可以手动将其添加到构造函数中,例如:{constructor:{prototype:{}};我不需要这样做,只是想了解机械原理。我不知道,因为我没有试过,但你可以自己轻松地检查;-)。PS:只是试了一下,不,它不起作用。好吧,我只是觉得有人知道它:我相应地修改了我的答案…:-)PS:如果这个答案回答了你的问题,如果你能把它标记为答案就好了;-)嗯,这背后有什么问题吗?谢谢你的帮助。
var fooProto = { … };

var foo = Object.create(fooProto);
function Fun() {};

var anonym = {};
var fun = new Fun;

anonym.prototype.p = function() {};
Fun.prototype.p = function(){};

'p' in anonym;  // false  
'p' in fun;     // true  (engine looks for properties in constructor's prototype object)

anonym.constructor.prototype.p = function() {};
'p' in anonym;  // true