gpt4 book ai didi

javascript - oop 行为类似于构造函数参数类型的类

转载 作者:行者123 更新时间:2023-11-30 08:00:40 25 4
gpt4 key购买 nike

我希望能够创建一个看起来像传递给它的对象的类,并向该对象添加新方法。

这是我目前拥有的:

Node = function(data) {
Node = data;
Node.constructor.prototype = new data.constructor();
Node.constructor.prototype.testProp = "Hello!";
return Node;
};

node = Node('abc');
console.log(node); // abc
console.log(node.testProp); // Hello!
var testArray = [];
testArray.push(node);
console.log(testArray); // ['abc']

这个实现有什么问题?

Node 类在此示例中看起来像一个字符串,但现在每个字符串都有一个 testProp 属性。

console.log(node.testProp) // 'Hello!'
console.log("something".testProp) // 'Hello!'

我的问题:

我应该如何实现一个类,它的行为类似于在构造函数中传递的对象,而不影响同一类的所有其他对象?

为什么?

我问这个的原因是我希望元素数据(字符串、数字、数组、对象等)无需使用任何方法或 Prop 即可访问,例如console .log(Node.value);,我只想使用 console.log(Node);

谢谢!

最佳答案

以下不适用于基本类型(如字符串和数字)但适用于对象:

node = function(data) {//do not capitalize non constructor functions
ret = Object.create(data);
ret.testProp = "Hello!";
return ret;
};

var proto = {name:'hello'};
test = node(proto);
console.log(test); //{testProp: "Hello!", name: "hello"}
console.log(test.testProp); // Hello!

请注意,如果你改变原型(prototype),你就会改变测试:

proto.name='changed';
console.log(test);//{testProp: "Hello!", name: "change"}

关于javascript - oop 行为类似于构造函数参数类型的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134963/

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