为什么我不能通过Object.defineProperties()在原型上定义属性或函数?

时间:2013-04-17 08:34:34

标签: javascript prototype prototypal-inheritance

我想立刻在我的对象的原型上设置多个属性,因为Object.defineProperties()接受一个对象(原型是一个对象)和描述符,而我的对象obj已经有一个原型,因为它随附每个对象,我试图修改我的对象的原型如下

var obj = document.createElement(tn);

obj.prototype = Object.defineProperties(obj.prototype,{
    getName:{
        value:function(){
            alert("I have the tag"+this.tagName);
        },
        configurable:true
        }
    });

但是我收到了一个错误:

Object.defineProperties called on non-object

为什么?

1 个答案:

答案 0 :(得分:3)

这是因为obj.prototype未定义。

您将其指向其他对象,属性将添加到其中。

JS有一个基于原型的继承模型,其中一个对象继承自另一个对象,如果它没有属性或方法,它会查看它的原型对象,它只是另一个具有属性和方法的对象,它们可能再次拥有它自己的原型对象。

您收到错误Object.defineProperties called on non-object只是因为obj.prototype不是对象且未定义。

将其设置为窗口或空{},它应该适合您。