在 JavaScript 中创建原型链 (ES-5)

发布于 2024-11-17 12:53:44 字数 448 浏览 3 评论 0原文

我正在尝试创建一个函数来创建带有原型链的对象,如下所示:

something = object(proto1, proto2, proto3);
// Lookup order is something -> proto1 -> proto2 -> proto3 -> Object.prototype

我将包装给定的原型以覆盖它们自己的查找链(以便它们可以重用),并且希望以最少的复制来做到这一点/内部属性包装。

Javascript/ECMAScript 5 中是否有任何功能可用于覆盖对象上的所有属性访问?类似于 Python 中的 __getattribute__(self, attrname) 吗?如果不是,我该怎么办?我是否被迫克隆对象的属性(使用Object.hasOwnProperty())?

I'm trying to create a function that creates an object with a prototype chain, like this:

something = object(proto1, proto2, proto3);
// Lookup order is something -> proto1 -> proto2 -> proto3 -> Object.prototype

I'd to wrap the given prototypes to override their own lookup chains (so they can be reused), and want to do so with minimal copying/inner attribute wrapping.

Is there any feature in Javascript/ECMAScript 5 that can be used to override all attribute accesses on an object? Something akin to __getattribute__(self, attrname) in Python? If not, how should I go about this? Am I forced to just clone the object's properties (with Object.hasOwnProperty())?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

多彩岁月 2024-11-24 12:53:44

JavaScript 有原型,因此可以使用如下构造:

// Small utility function
function Object.extend(obj, properties) {
    for (var i in properties) {
        obj[i] = properties[i];
    }
    return obj;
}

// Create a subclass of Object 
function Class3() {}
Class3.prototype = proto3;

// Create a subclass of Class3
function Class2() {}
Class2.prototype = new Class3();
Object.extend(Class2.prototype, proto2);

// Create a subclass of Class2
function Class1() {}
Class1.prototype = new Class2();
Object.extend(Class1.prototype, proto1);

// Instantiate an object whose prototype chain is proto1, proto2, proto3
var something = new Class1();

JavaScript has prototypes, so could use a construct like:

// Small utility function
function Object.extend(obj, properties) {
    for (var i in properties) {
        obj[i] = properties[i];
    }
    return obj;
}

// Create a subclass of Object 
function Class3() {}
Class3.prototype = proto3;

// Create a subclass of Class3
function Class2() {}
Class2.prototype = new Class3();
Object.extend(Class2.prototype, proto2);

// Create a subclass of Class2
function Class1() {}
Class1.prototype = new Class2();
Object.extend(Class1.prototype, proto1);

// Instantiate an object whose prototype chain is proto1, proto2, proto3
var something = new Class1();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文