Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过prototype(不是prototype framework)属性创建对象与jquery命名空间对象之间的区别?_Javascript_Jquery - Fatal编程技术网

Javascript 通过prototype(不是prototype framework)属性创建对象与jquery命名空间对象之间的区别?

Javascript 通过prototype(不是prototype framework)属性创建对象与jquery命名空间对象之间的区别?,javascript,jquery,Javascript,Jquery,我只需要知道使用这两种方法创建对象与使用对象的效果之间的基本区别 ////////////////////////////////////////// myTestObject.prototype.var1 = null; function myTestObject() { this.var1 = "test me"; } myTestObject.prototype.action = function() { alert("alertme"); }; // to use va

我只需要知道使用这两种方法创建对象与使用对象的效果之间的基本区别

//////////////////////////////////////////
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中构造函数和文本对象的关系

然后,作为使用函数构造函数时为什么使用原型的一个步骤,请特别注意为什么使用原型更好

因此,作为后续,您可以将下面的吉他示例中的两种方法结合使用,作为一种良好的练习。如果只需要对象的一个副本,并且对其进行更改,知道它会影响整个脚本是可以的,那么对象文本就可以了。但是,如果需要使用prototype方法创建多个对象,则最好使用prototype方法,以便所有创建的对象都使用对同一函数的引用,而不是函数的副本

$('#test').myTestObj3.action(); // wrong
另一篇很好的文章可以更好地使用名称空间并结合所有这些方法

上次随访 我希望其他人会觉得这很有用,因为这些话题让我有一段时间感到困惑

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

这篇文章描述了如何使用原型符号来使用模块模式。这将允许您划分代码,同时仍然确保实例引用相同的对象。

这涉及到几种设计模式,列出了优点和缺点

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

$('#test').myTestObj3.action(); // wrong
如果希望它位于jQuery的原型上,请扩展
$.fn
对象

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

看看,这里有一些摘录:

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

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


所以在我的示例中,如果我创建100个myTestObject3,我将获得100个相同属性和方法的副本。。。然而,如果我创建100个myTestObject,我会得到100个对象,每个对象引用所有属性和方法的相同副本。这是正确的吗?而且我从未见过constructor.prototype=Instrument;我已经看到ObjectName.prototype.property=value。。。你使用prototype属性的方式。。。几乎是使用模块模式和立即调用的函数表达式的混合,我从来没有见过两者混合使用。对于myTestObject来说是这样,但是对于myTestObjects3对象,我不知道,因为您没有像我链接的问题中的吉他示例那样,在
new
中使用普通对象创建;这不是你在吉他上使用它的方式吗?抱歉误读了你的评论。。。。对于myTestObject3,我如何使用该符号创建“新”对象