javascript – Object使用原型函数名称的名称而不是其属性

我创建了两个函数A和B. Made A作为B.
jsfiddle的原型

function A(){

}

function  B(){
    this.name ="Class B";
}

B.prototype = A;
var b = new B();
alert(b.name); // expected Class B got A

我知道我应该使用B.prototype = new A();

是否有预期的行为?
在上面的场景中是否可以获得“B级”而不是“A”?

注意:我在上面使用是因为A有一些属性与它相关联A.text =“Text”A.text1 =“Text2”我希望这些属性可用于B. so B.prototype == A.prototype.不能使用.

最佳答案 看看可能重复的
What is the reason to use the ‘new’ keyword at Derived.prototype = new Base以及
this answer为什么javascript中没有“类”.

是的,行为是预期的. B.prototype,即b实例继承的对象,是函数对象A.因此,它继承了它的name property,即字符串“A”.

并且,此属性是不可变的(其属性描述符为{configurable:false,enumerable:false,value:“B”,writable:false}),因此当您尝试为b.name分配新值时,this will check[[CanPut]]分配返回false – 没有任何反应.在严格模式下,将抛出严格模式TypeError中的无效赋值(demo).

您只能使用Object.defineProperty覆盖它.

@Edit:我不确定为什么你想要B继承的那些属性.它们是A构造函数的“静态属性”,它们应该保留在那里.目前没有办法让Function继承Function.prototype以外的任何东西,所以要么你复制它们要么你不使用它们.告诉我们您需要什么,我们可以找到解决方案.

更改函数(以及一般对象)的prototype属性不会使它们从其他任何东西继承.函数的prototype属性指向新创建的(构造的)实例将从其继承的对象.

点赞