我正在玩JS" oop" (或者我应该说" pop" - 面向原型的编程?)并尝试做类似静态方法和函数的事情。我可以从原型对象调用函数,但这不是完全静态函数,是吗?
我有那段代码:
function a(val){
this.val = val;
console.log(this);
this.foo = function(){
console.log('hi');
}
}
我想在不创建新对象的情况下调用foo函数。这样的事情有可能吗?我该怎么办?
答案 0 :(得分:1)
如果您尝试模仿静态功能,则需要在创建"类"后添加方法:
function A(val) {
this.val = val;
}
A.foo = function() {
console.log('hi');
}
然后您可以在不必使用原型的情况下调用A.foo();
。它与Object.keys
的工作方式非常相似。这使它成为函数的属性,而不是实例的属性,如静态函数。
答案 1 :(得分:0)
如上所述,如果不实例化foo
,则无法致电a
。
您可以做的最好的事情是隐藏对象的实例化,如下所示:
var a = {
foo: function() {
console.log('hi');
}
};
关于模拟静态函数,这是你最接近的:
function A(val) {
this.val = val;
console.log(this);
}
A.prototype.foo = function() { console.log('hi'); };
此时您无需实例化A来调用foo。
A.prototype.foo(); // 'hi'