gpt4 book ai didi

javascript - 在 JavaScript 中使用原型(prototype)继承的正确方法?

转载 作者:行者123 更新时间:2023-11-30 06:54:52 25 4
gpt4 key购买 nike

当我们在属性(父类(super class)型中的数组)中有引用值时,使用 Crockford 的方法(http://javascript.crockford.com/prototypal.html)不起作用,因为这在所有对象中都很常见。

那么,真正推荐的在 Javascript 中执行对象继承的方法是什么,它没有问题并且在视觉上更好地封装了对象的所有方法和属性?

例子:

if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
var p1 = {name: "nick", friends : ["a1", "a2"]};
var p2 = Object.create(p1);
p2.name ="john";
p2.friends.push("andre");
alert(p1.friends);
alert(p2.friends);
alert(p1.name);
alert(p2.name);

friends 数组为 p1 和 p2 返回相同的值,而我希望它返回不同的值。

最佳答案

好吧,原型(prototype)链中较高的成员是“共享的”,这就是原型(prototype)继承的目标......

但是,您可以为新创建的对象分配一个自己的属性(就像您对 name 属性所做的那样,例如:

var foo = {foo: "xxx", array : ["a1", "a2"]};

var bar = Object.create(foo);
bar.foo = "yyy";
bar.array = ["b1", "b2"];
bar.array.push("bar");

alert(foo.array); // ["a1", "a2"]
alert(bar.array); // ["b1, "b2", "bar"]
alert(foo.foo); // "xxx"
alert(bar.foo); // "yyy"

标准 Object.create 方法,在 latest browser versions 上可用, 提供了一种使用第二个参数创建自己的属性的方法,例如您可以:

// ...
var bar = Object.create(foo, {
foo: { value: 'yyy'},
array: {value: ["b1", "b2"] }
});
// ...

关于javascript - 在 JavaScript 中使用原型(prototype)继承的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956107/

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