你试图做的是什么将被称为其他语言的类静态方法。
要做到这一点在Javascript中你必须写
Class.CONST = 1;
那么你就可以Class.CONST;
调用它,如果你试图用实例方法来访问它像new Class().CONST
,这将是不确定的
返回到您的问题,Class.prototype中的所有内容只能通过对象的实例(即通过new
创建)访问,而不是Class本身。为什么?
考虑的new
Function.method('new', function() {
var that = Object.create(this.prototype);
var other = this.apply(that, arguments);
return (typeof other === 'object' && other) || that;
});
第一Object.create(this.prototype)
实施创建从this.prototype
继承了一个全新的对象其中U通过Class.prototype = { Const : 1 }
声明,那么它叫this.apply(that, arguments)
,它只是用that
作为this
打电话给你的声明类功能变量。然后它返回对象。你可以看到Class函数只是用来通过new
将事物填充到新创建的对象中。只有创建的对象才能访问原型方法。
我没有足够的信心把它放在一个答案中,但我会说,类没有原型链......它是一个构造函数。作为Class实例的对象具有您使用'Class.prototype = ...'创建的原型链。换句话说,'Class.prototype'没有引用'Class'对象的原型链,而是引用'Class'构造函数创建的对象的原型链。 – LarsH
@LarsH - 我很确定函数对象有原型链。然而,你的评论的第二部分,很多都是澄清的。我正在将'Class'的'prototype'属性与原型链混合在一起。 –
特德,我不否认函数对象有原型链......只是A.原型是对象A的原型链(我同意你的看法)。 – LarsH