简体   繁体   English

Javascript:确定对象是否在内存中重复

[英]Javascript: Determine if object is being duplicated in memory

Javascript question: How can I determine if "ModuleMethodsConstructor" is being duplicated in memory for each instance of "ModulePropertiesConstructor"? Javascript问题:如何确定是否为每个“ ModulePropertiesConstructor”实例在内存中复制“ ModuleMethodsConstructor”? My goal is that each instance use the same methods, and I don't want to use prototype. 我的目标是每个实例使用相同的方法,并且我不想使用原型。

function ModuleMethodsConstructor() {

    var referenceToInstanceProperties = arguments[0];

    var privateMethods = {}; // 
    var publicMethods = {};


    publicMethods.setProperty1 = function(){
        referenceToInstanceProperties.property1 = arguments[0];
    };

    publicMethods.getProperty1 = function(){
        console.log(referenceToInstanceProperties.property1);
    };

    privateMethods.privateMethod = function() {
        console.log('privateMethod');   
    };

    return {'privateMethods':privateMethods,'publicMethods':publicMethods};

}; // ModuleMethodsConstructor


function ModulePropertiesConstructor() {

    var properties = {
        'property1' : 'value1', 
    };

    var returned = ModuleMethodsConstructor(properties); 

    var privateMethods = returned.privateMethods;
    var publicMethods = returned.publicMethods;

    return publicMethods;

}; // ModulePropertiesConstructor


var instance1 = ModulePropertiesConstructor();

var instance2 = ModulePropertiesConstructor();

Thanks, Bergi I tested using the equality operator as you suggested. 谢谢,Bergi我按照您的建议使用相等运算符进行了测试。 I guess I'm trying to rig up a way to get the advantages of closure constructors (private members) and the advantages of prototype (method definitions loaded into memory once and shared among instances). 我想我正在尝试建立一种方法来获得闭包构造函数(私有成员)的优点和原型的优点(方法定义一次加载到内存中并在实例之间共享)。 I've read from various sources that marrying the 2 isn't possible ... in the past I've favored closures because early on reading Crockford's book. 我从不同的来源获悉,不可能将2结婚。过去,我更喜欢闭包,因为早在阅读Crockford的书时就可以了。 That said, maybe I'll try prototype for a bit ... Ted PS. 也就是说,也许我会尝试一下原型... Ted PS。 and thanks Pointy and RobG 并感谢Pointy和RobG

Hey, I just came up with this: 嘿,我刚想到这个:

var l = function(){console.log(arguments[0]);} // for shorthand console logging var l = function(){console.log(arguments [0]);} //用于简化控制台日志记录

// 3 constructors for each object is to achieve private members (closure) plus each instance sharing in-memory method definitions (like prototype) //每个对象有3个构造函数,以实现私有成员(闭包)以及每个实例共享内存中的方法定义(如原型)

function ModulePrivateMethodsConstructor() { 函数ModulePrivateMethodsConstructor(){

var properties = {};
var privateMethods = {};
var publicMethods = {}; // will become private methods of instance



publicMethods.test = function() {

    l('test');

}; // 

return publicMethods;

}; }; // ModulePrivateMethodsConstructor // ModulePrivateMethodsConstructor

var modulePrivateMethods = ModulePrivateMethodsConstructor(); var modulePrivateMethods = ModulePrivateMethodsConstructor();

function ModulePublicMethodsConstructor() { 函数ModulePublicMethodsConstructor(){

var properties = {};
var privateMethods = {};
var publicMethods = {}; // will become public methods of instance



publicMethods.test = function() {

    l('test');  

}; // publicMethods.test

publicMethods.logID = function() {

    // l(this); // this refers to ModulePublicMethodsConstructor 

    l(arguments[0].instanceProperties.id);

}; // publicMethods.logID

return publicMethods;

}; }; // ModulePublicMethodsConstructor // ModulePublicMethodsConstructor

var modulePublicMethods = ModulePublicMethodsConstructor(); var modulePublicMethods = ModulePublicMethodsConstructor();

function ModulePropertiesConstructor() { 函数ModulePropertiesConstructor(){

var properties = {};
properties.id = arguments[0].id;

var privateMethods = {};
var publicMethods = {};
var instancePublicMethods = {};

privateMethods = arguments[0].modulePrivateMethods;

publicMethods = arguments[0].modulePublicMethods;


// each method needs this signature so the methods have access to instance properties
instancePublicMethods.logID = function(){
    publicMethods.logID({'args':arguments[0],'instanceProperties':properties});
}; // 





return instancePublicMethods;

}; }; // ModulePropertiesConstructor // ModulePropertiesConstructor

var modulePropertiesConstructorArgs = {'modulePrivateMethods':modulePrivateMethods,'modulePublicMethods':modulePublicMethods}; var modulePropertiesConstructorArgs = {'modulePrivateMethods':modulePrivateMethods,'modulePublicMethods':modulePublicMethods};

modulePropertiesConstructorArgs.id = 'instance1'; modulePropertiesConstructorArgs.id ='instance1'; var instance1 = ModulePropertiesConstructor(modulePropertiesConstructorArgs); var instance1 = ModulePropertiesConstructor(modulePropertiesConstructorArgs);

modulePropertiesConstructorArgs.id = 'instance2'; modulePropertiesConstructorArgs.id ='instance2'; var instance2 = ModulePropertiesConstructor(modulePropertiesConstructorArgs); var instance2 = ModulePropertiesConstructor(modulePropertiesConstructorArgs);

instance1.logID(); instance1.logID();

instance2.logID(); instance2.logID();

instance1.logID(); instance1.logID();

// support chaining? //是否支持链接? return a reference to the intended callee 返回对预期被调用者的引用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM