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