gpt4 book ai didi

javascript - 函数的原型(prototype)属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:33:44 26 4
gpt4 key购买 nike

我想得到这个:

a = new Foo(name); // a is function
a(); // returns a result
a.set(); // returns another result

我在上面是这样实现的:

function Foo (name) = {
val = name;
ret = function () { return val; }
ret.set = function (v) { return val = v; }
return ret;
}

然后,对于 Foo 的多个实例,我不想创建方法“set”,而是通过原型(prototype)属性共享它。然而,我所做的所有实验都没有效果。它仅适用于对象,不适用于函数。即使下面的代码也不起作用:

foo = function () { return 'a'; }
foo.foo = function () { return 'foo'; }
foo.prototype.bar = function () { return 'bar'; }

foo(); // a
foo.foo(); // foo
foo.bar(); // Uncaught TypeError: Object function () { return 'a'; } has no method 'bar'

最佳答案

遗憾的是,无法通过原型(prototype)链将属性仅添加到某些函数。函数在其原型(prototype)链中有一个对象,即 Function.prototype。无法创建具有其他 [[Prototype]] 的函数。

最接近您想要的是以下两个示例:

您的解决方案

function Foo (name) = {
val = name;
ret = function () { return val; }
ret.set = function (v) { return val = v; }
return ret;
}

改变 Function.prototype

Function.prototype.set = function (v) { return this.val = v; };
function Foo (name){
ret = function () { return this.val; }
ret.val = name;
return ret;
}

var f = new Foo('myfunc');
f.set('myval');
console.log(f.val);

我强烈推荐第一个解决方案,因为在第二个解决方案中,每个函数共享 set 属性/方法。更改预定义的原型(prototype)通常是不受欢迎的,除非它是为了从较新版本的语言移植功能。

关于javascript - 函数的原型(prototype)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20523967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com