【问题标题】:Best practices using Javascript prototypes使用 Javascript 原型的最佳实践
【发布时间】:2012-12-14 18:43:10
【问题描述】:

我知道有很多关于使用原型的材料,但似乎有很多不同的建议方法,我正在努力寻找我的方法。我真的只是在寻找有关以下结构的反馈,如果您发现它有任何问题。提前致谢。

function Class(){}

Class.prototype = {
    MethodOne: function() {

    },
    MethodTwo: function() {

    },
    MethodThree: function() {

   }
}

【问题讨论】:

  • 要回答您的问题,它看起来语法正确。但这一切都取决于您的用例。你是否试图把它变成一个你最终会继承给其他对象的对象?
  • 一个你弄清楚你的原型目标是什么,用细节更新你的问题并在 cmets 中通知。

标签: javascript function-prototypes


【解决方案1】:

整体完美!这也是我创建课程的方式。以下是一些小的修改:

function Class() {
   return this;
}

Class.prototype = {
    methodOne: function() {

    },
    methodTwo: function() {

    },
    methodThree: function() {

   }
}

1) 将方法名称更改为以小写开头。只是为了约定。
2) 让您的构造函数返回 this(新创建的对象)。
3)一旦你创建了这个类,你可以像这样使用它:

 var obj = new Class();  
 obj.methodOne();  

【讨论】:

  • 构造函数中不需要return this。这是一种默认行为。但很高兴知道,构造函数可以返回与this 不同的对象,但它不能返回原始值。
【解决方案2】:

您的示例非常简单且语法正确。但是,我想与您分享我的想法。

首先,您完全替换了 Class 构造函数的原型对象。没关系,但是您从使用Class 创建的对象中丢失了对构造函数的引用。使用您的代码:

var a = new Class();
a.constructor; // => function Object() { [native code] }

如果constructor 属性指向Class 不是更好,因为它是一个真正的构造函数吗?要修复它,您需要将constructor 属性添加到Class 原型。喜欢:Class.prototype.constructor = Class

其次,我通常看到对象方法以小写字母开头。这是一种约定,但这就是所有本机对象方法的定义方式。例如,查看默认 Date 对象 (Date.prototype.*) 中定义的方法。它们都以小写字母开头。

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多