簡體   English   中英

Javascript:確定對象是否在內存中重復

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

Javascript問題:如何確定是否為每個“ ModulePropertiesConstructor”實例在內存中復制“ ModuleMethodsConstructor”? 我的目標是每個實例使用相同的方法,並且我不想使用原型。

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();

謝謝,Bergi我按照您的建議使用相等運算符進行了測試。 我想我正在嘗試建立一種方法來獲得閉包構造函數(私有成員)的優點和原型的優點(方法定義一次加載到內存中並在實例之間共享)。 我從不同的來源獲悉,不可能將2結婚。過去,我更喜歡閉包,因為早在閱讀Crockford的書時就可以了。 也就是說,也許我會嘗試一下原型... Ted PS。 並感謝Pointy和RobG

嘿,我剛想到這個:

var l = function(){console.log(arguments [0]);} //用於簡化控制台日志記錄

//每個對象有3個構造函數,以實現私有成員(閉包)以及每個實例共享內存中的方法定義(如原型)

函數ModulePrivateMethodsConstructor(){

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



publicMethods.test = function() {

    l('test');

}; // 

return publicMethods;

}; // ModulePrivateMethodsConstructor

var modulePrivateMethods = ModulePrivateMethodsConstructor();

函數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

var modulePublicMethods = ModulePublicMethodsConstructor();

函數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

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

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

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

instance1.logID();

instance2.logID();

instance1.logID();

//是否支持鏈接? 返回對預期被調用者的引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM