gpt4 book ai didi

javascript - 将对象转换为函数

转载 作者:行者123 更新时间:2023-11-28 18:32:45 24 4
gpt4 key购买 nike

如何将变量参数传递给函数?我的例子不起作用。 “run”函数抛出错误=“参数未定义”

        var newClass = function (obj) {
var param = "the param";
var f = function (param) { };
f.prototype = obj;
return nf = new f(param);
};

var Runner = {
run: function () {
console.log("calling method run " + param);

}
};

var nf = newClass(Runner);
nf.run();

最佳答案

看起来您的目标是让 newClass 返回一个使用 Runner 作为原型(prototype)并以 param 作为属性的对象。有一个非常简单的方法可以做到这一点:见评论:

var newClass = function(obj) {
// Create an object using `obj` as its prototype
var nf = Object.create(obj);

// Give it a `param` property
nf.param = "the param";

// Return it
return nf;
};

var Runner = {
run: function() {
// Note the use of `this `on the next line, to access
// the property in the instance
console.log("calling method run " + this.param);
}
};

var nf = newClass(Runner);
nf.run();

Object.create 是在 ES5(2009 年)中添加的,因此几乎存在于任何最近的 JavaScript 引擎中(因此,不是 IE8 中的引擎);上面的单参数版本可以使用与您的问题中非常相似的代码进行填充,请参阅 MDN .

完全兼容ES5的JavaScript引擎上,您可以使用Object.create的第二个参数(不能填充/填充)来控制可枚举性、可写性以及属性的可配置性:

var newClass = function(obj) {
// Create and return an object using `obj` as its prototype,
// with a `param` property:
return Object.create(obj, {
param: {
value: "the param"
}
});
};

在该示例中,param 将是不可枚举、只读且不可配置的。

<小时/>

旁注:我不会调用创建新对象newClass的函数,只是FWIW。 :-)

<小时/>

您在评论中说过:

My goal is to generate a private variable, only accessible from the inside of Runner. In your example, param is accessible from the outside.

如果是这样,则无法在 newClass 函数外部定义 Runner 来执行此操作,因为根据定义,那是...在 newClass 函数。

可以做的是在newClass中定义run,也许让它转身并调用Runner上的函数code> 接受 param 作为参数:

var newClass = function(obj) {
// The private variable
var param = "the param";

// Create an object using `obj` as its prototype
var nf = Object.create(obj);

// Create `run`
nf.run = function() {
this.runWithParam(param)
};

// Return it
return nf;
};

var Runner = {
runWithParam: function(param) {
console.log("calling method runWithParam " + param);
}
};

var nf = newClass(Runner);
nf.run();

...或者可能根本不使用 Runner 作为原型(prototype):

var newClass = function(runner) {
// The private variable
var param = "the param";

// Create an object with `run` on it
var nf = {
run: function() {
return runner.runWithParam(param);
}
};

// Return it
return nf;
};

var Runner = {
runWithParam: function(param) {
console.log("calling method runWithParam " + param);
}
};

var nf = newClass(Runner);
nf.run();

关于javascript - 将对象转换为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37660891/

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