首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Class.prototype.method对this.prototype.method

Class.prototype.method对this.prototype.method
EN

Stack Overflow用户
提问于 2014-03-02 04:42:57
回答 4查看 13.7K关注 0票数 23

我总是看到Class.prototype.method的例子,但从未见过this.prototype.method的实例。例如:

代码语言:javascript
复制
function Class() {
    this.prototype.method = function() {
        alert("is this allowed?");
    };
}

vs

代码语言:javascript
复制
function Class() {}
Class.prototype.method = function() {
    alert("traditional example");
};
  1. this.prototype存在吗?
  2. 它和Class.prototype一样吗?
  3. 遗产呢?
EN

回答 4

Stack Overflow用户

发布于 2014-03-02 05:06:19

  1. this.prototype存在吗? 不是的。但是,this.constructor.prototype应该。
  2. 它与类(.constructor).prototype相同吗? 它通常具有相同的值(只要this.constructor === Class),但不具有相同的意图。
  3. 遗产呢? 每个new Class实例将从Class.prototype继承。因此,prototype对象很适合定义所有实例都可以访问的共享值。然后,构造函数只需设置每个实例所特有的状态。 但是,尝试混合2并在构造函数中设置prototype属性有几个问题,包括鸡或蛋冲突,因为该方法在创建第一个实例之前不存在: 函数类() { this.constructor.prototype.method =函数() {};}console.log(Class.prototype.method类型);//“未定义”var a=新类();console.log(Class.prototype.method类型);//“函数” 并且在使用每个附加实例重新创建该方法时,prototype的一些优点也被忽略了: var方法= a.method;console.log(a.method ===方法);// true var b=新类();console.log(a.method ===方法);// false
票数 22
EN

Stack Overflow用户

发布于 2014-03-02 04:54:59

this.prototype将引用类对象的实例。它不会给你太多的好处,因为它的范围。

Class.prototype正在向类添加功能,而不是它的实例。

票数 4
EN

Stack Overflow用户

发布于 2014-03-02 05:05:26

Class是一个函数,this是一个对象。函数具有prototype属性;对象没有。在对象上定义了一个__proto__属性,但是这个接口是不推荐的。你可以做这样的事

代码语言:javascript
复制
function Class () {
    var prototype = Object.getPrototypeOf(this);
    prototype.method = function () {};
}

在构造函数中--但这并不是很好的实践--每次实例化Class时,它都会不必要地浪费在原型上覆盖method的周期,而且在代码更复杂的情况下,最终也可能会浪费内存。

简而言之,这样做没有好处,也可能有严重的负面影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22123965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档