JavaScript:将原型方法添加到内部类
JavaScript: Add prototype methods to inner class
我想向内部类的原型添加一个方法。这可能吗?
这是我尝试过的:
var Foo = function Foo() {};
Foo.prototype = {
Bar: function Bar() { },
Bar.prototype: { // <- this does not work
barMethod: function () {
console.log('hello');
}
},
fooMethod: function () {
var bar = new this.Bar();
bar.barMethod();
}
}
var foo = new Foo();
foo.fooMethod();
但是Bar.prototype
不起作用,它会抛出一个语法错误,并带有消息Unexpected token .
。
你的问题是你正在定义 Foo.prototype 对象,因此,你受对象创建的规则和语法的约束,例如,解析器希望你以key: value, nextkey: nextvalue
格式列出属性,而 Bar.prototype 不适合。(键实际上是字符串,在其中使用 .
是没有意义的,因为它们会在解析时产生歧义*)
试试这个:
var Foo = function Foo() {};
Foo.prototype.Bar = function Bar() { };
Foo.prototype.Bar.prototype = {
barMethod: function () {
console.log('hello');
}
};
不过,语义上略有不同,因为这样你就不会覆盖原型,只是扩展它。(考虑先将其等于{}
,然后使用您尝试创建的对象的每个属性对其进行扩展)
(*) 关于歧义的说明:我在上面提到,在对象键中有一个.
会产生歧义,这里有一个简单的例子:
var foo = {
bar: {
baz: 0,
qux: 20
},
bar.baz: 150 //note that this will throw an error
};
console.log(foo.bar.baz);
如果上面的这段代码不会引发错误,您希望console.log(foo.bar.baz)
打印什么,0 还是 150?
这就是为什么在密钥中使用.
没有意义的原因,这就是为什么解析器在任何.
上抛出意外的令牌错误。
当然,您可以使用"bar.baz"字符串作为"bar.baz": 150
上面的键(请不要!),但是您必须将该值引用为
foo["bar.baz"]
这将与
foo.bar.baz;
总而言之,这只是一些基于直觉的推理,为什么你不能在密钥中使用.
,但真正的原因显然是这样的:因为解析器会抛出错误。
在对象文本中,只能定义该对象文本的属性,而不能定义值的属性。
但是,如果要在创建对象时设置prototype
,请考虑Object.assign
(可以填充
Foo.prototype = {
Bar: Object.assign(function Bar() { }, {
prototype: {
barMethod: function () {
console.log('hello');
}
}
}),
fooMethod: function () {
var bar = new this.Bar();
bar.barMethod();
}
};
但是,请注意,替换所有原型是一种不好的做法,因为会擦除 constructor
属性。
- HTML图像未加载(自动添加内联css和属性)
- 向ckeditor中的多个元素添加内联样式
- 如何使用 JavaScript 隐藏内部类元素
- Prestashop - 如何添加内联脚本
- 如何在 jQuery 中添加内联样式
- SVG d3 |我可以动态添加内联样式吗?
- 使用jquery向lastli添加内联样式
- 在CakePHP中向表单输入元素添加内联JavaScript
- 在CK编辑器4中为链接添加内联样式
- 在运行时有问题的附加项上添加内联样式
- 如何获得_this内部类,在另一个上下文
- 使用LESS对同名的内部类进行递归样式化
- 如何在Asp.Net中使用JavaScript中的公共或内部类
- async模块内部类的访问方法或
- 向内部类添加事件侦听器
- 我如何使用MongoDB db.col .find()根据内部类中的字段进行搜索
- 添加内联样式来响应
- 在javascript中相互访问单例类和内部类
- 为布局中的元素添加内边距'在顶部添加空白空间
- JavaScript:将原型方法添加到内部类