是否可以在javascript中为现有对象分配原型?

2 javascript inheritance

如果我有:

function Base (){
    this.sayHi = function(){
        alert('hi');
    }
}

function Thing (val){
    this.value = val;
}

var bob = new Thing("bob");
Run Code Online (Sandbox Code Playgroud)

有什么方法我现在可以说bob继承自Base,以便我可以调用:

bob.sayHi();
Run Code Online (Sandbox Code Playgroud)

基本上在该实例上可以使用Base类的所有方法和属性吗?

基于CMS帖子的解决方案的更相关示例:

这里的项目可以表示服务器返回的数据.

var Items = [
    { sku: 123, type:'buggy', title:'This is a title', description: 'this is a description' },
    { sku: 234, type: 'baby-monitor', title: 'This is a title 2', description: 'this is a description 2' }
]

function ItemMethods() {
    this.BannerHTML = function () {
        return '<div class="banner _item_' + this.type + '_' + this.sku + '"><h2>' +
            this.title + '</h2><p>' +
            this.description + '</p></div>';
    };
}

Items.GetBySKU = function (code) {
    for (var i = 0; i < Items.length; i++) {
        if (Items[i].sku == code) {
            return Items[i];
        }
    }
};

$.each(Items, function (i, item) {
    ItemMethods.apply(item);
});

alert(Items.GetBySKU(234).BannerHTML());
Run Code Online (Sandbox Code Playgroud)

任何进一步的评论或解决方案很乐意接受..总是对问题的潜在解决方案感兴趣;-)

小智 7

没有方法来分配不同的[[原型]]一个的现有对象,至少根据该说明书.的[[原型]是构造器(又名"包含在")从评价得到的对象prototype属性在新对象的创建的时间,并且不能在稍后重新分配.(我希望它可以正式更改,但唉它是一个不受支持的操作,通常可以通过不同的方法进行模拟.)

某些浏览器/环境可能会选择使用非标准方法公开创建后[[prototype]]赋值.的[[原型]](多个)对象可以被修改(例如,添加到String.prototype),或单功能可被添加到目标对象(见CMS的答案),或现有对象可以包裹(本质上是动态的"子类") - 取决于要求和限制.

此外,Javascript中没有"类":虽然"经典的单继承对象定向类"可以在Javascript中实现,但我发现限制自己限制模型或使用这样的术语.语言希望成为现实.

快乐的编码.