2

我只需要知道使用这两种方法创建对象的基本区别是什么,以及使用对象的效果。

//////////////////////////////////////////
myTestObject.prototype.var1 = null;
function myTestObject()
{
    this.var1 = "test me";
}

myTestObject.prototype.action = function()
{
    alert("alertme");
};
// to use
var a = new myTestObject();
a.action();
//////////////////////////////////////////


//////////////////////////////////////////
(function()
{
    $.myTestObject3 = {
      var1 : "test me",
      action : _actionMethod
    };

    function _actionMethod()
    {
        alert("alertme3");
    }

 })();


$.myTestObject3.action();
//////////////////////////////////////////

一些更新......这个问题的答案让我去谷歌搜索不同的关键词,这导致了两篇有趣的文章,这些文章真正详细介绍了 javascript 中的构造函数与文字对象

http://net.tutsplus.com/tutorials/javascript-ajax/the-basics-of-object-oriented-javascript/

然后作为使用函数构造函数时为什么要使用原型的继续,特别注意为什么使用原型更好的部分

http://net.tutsplus.com/tutorials/javascript-ajax/prototypes-in-javascript-what-you-need-to-know/?search_index=1

因此,作为后续,您可以将两者结合起来使用,就像下面的吉他示例一样,作为一个很好的练习。如果只需要一个对象的一个​​副本并且对其进行更改,知道它会影响整个脚本是可以的,那么对象字面量就可以了。但是,如果需要使用原型方法创建许多对象是最好的,因此所有创建的对象都使用对同一函数的引用,而不是拥有该函数的副本。

另一篇更好地利用命名空间并结合所有这些方法的好文章 http://javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript/

最后的跟进 我希望其他人觉得这很有用,因为这些主题让我陷入了一段时间的循环。

现在知道要寻找什么,我找到了两个非常好的 url,它们描述了许多设计模式以及如何使用几个示例在 javascript 中混合它们。

这篇文章描述了如何以利用原型符号的方式使用模块模式。这将允许您划分代码,同时仍确保实例引用相同的对象。 http://briancray.com/posts/javascript-module-pattern/

这经历了几种设计模式并列出了优缺点 http://addyosmani.com/resources/essentialjsdesignpatterns/book/

4

2 回答 2

1

使用的对象$将无法使用myTestObject3,因为它尚未在 jQuert 原型上扩展。myTestObject3是一个对象字面量,而不是一个构造函数。

$('#test').myTestObj3.action(); // wrong

如果您希望它位于 jQuery 的原型上,请扩展该$.fn对象。

myTestObject您可以使用原型继承从(构造函数)派生任意数量的“子代” 。

于 2012-10-31T12:19:54.437 回答
1

看看为什么 JavaScript 原型设计?,从那里摘录一些:

如果您将所有属性和方法添加到对象函数构造函数,然后创建该对象的 100 个实例,您将获得所有属性和方法的 100 个副本。相反,如果您将所有属性和方法添加到对象函数构造函数的原型中,然后创建该对象的 100 个实例,您将获得对对象属性和方法的单 (1) 个副本的 100 个引用。这显然更快、更有效,这就是为什么要使用原型(除了改变字符串和图像之类的东西,如下所述)

使用原型的另一个原因是模拟经典继承:

var Instrument = {
    play: function (chord) {
      alert('Playing chord: ' + chord);
    }
};

var Guitar = (function() {
    var constructor = function(color, strings) {
        this.color = color;
        this.strings = strings;
    };
    constructor.prototype = Instrument;
    return constructor;
}());

var myGuitar = new Guitar('Black', ['D', 'A', 'D', 'F', 'A', 'E']);
myGuitar.play('D5');
于 2012-10-31T12:21:46.000 回答