且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JavaScript里类和私有属性的两种实现方式

更新时间:2022-09-01 19:32:45

</div><div data-lake-id="3d581603faed97777cf73568dec87f7c">function createClass(conf){</div><div data-lake-id="b752a02be064d8276c14da8f06369860">    function _injectAttribute(fn){</div><div data-lake-id="896117c54a427fa756a61acdf55f3feb">        var prototype = fn.prototype;</div><div data-lake-id="cf69b701bdc310947d2bff9deb46c964">        for(var publicName in publics){</div><div data-lake-id="ceaf5f54cc55293a9647c88039994128">            if(!publics.hasOwnProperty(publicName))</div><div data-lake-id="b57fc8d634696e67e626efbaa77d55e7">                continue;</div><div data-lake-id="4eb603b1ca83206d90b0f31c2edcfdbe">            if(typeof publics[publicName]=="function")</div><div data-lake-id="4fab5fa05e74b86c855e9b56774a110c">                prototype[publicName] = function(publicName){</div><div data-lake-id="5cfadfc01f1faf2e0dbd68186601ec95">                    return function(){</div><div data-lake-id="8eceb6158cfcf952172539527b869d24">                        return publics[publicName].apply(privates, arguments);</div><div data-lake-id="e28656781723479fdf82f7bf35b9bbac">                    }</div><div data-lake-id="fe0af4b79b89c65024e534b342f15f31">                }(publicName);</div><div data-lake-id="45ebef992e5b1ceecc96368b8168ae4f">            else  </div><div data-lake-id="ea0a1b7a99374ce660c5f9163c750b27">                prototype[publicName] = publics[publicName];</div><div data-lake-id="45aa1c478aab07ab5f9658e7df30fca7">            if(!privates[publicName])</div><div data-lake-id="43b31d8f381b08f291f23fd2e4324abc">                privates[publicName] = prototype[publicName];</div><div data-lake-id="6a031f5f8f3c8d988ea216187ad6ea06">        }</div><div data-lake-id="bebe5d2ef1204ec7d5b75673e7f07929">        return fn;</div><div data-lake-id="dbfe1d05be7fd93cc5ead22bb3db3b16">    }</div><div data-lake-id="dd92ff2d63e08e530bceeca39f7e3cc0">    var publics, privates;</div><div data-lake-id="5a78b6c0e7df7874cf97a206b21660e8">        publics = conf.publics;</div><div data-lake-id="da222bd8c8ec5f200f59bce4915029d7">        privates = conf.privates || new Object();</div><div data-lake-id="7076f6ce1bae15d108e0735d671cb33b">    var fn = function(fn){</div><div data-lake-id="72d0eeefb0f7972ddd84e4eb43fc77fa">     return function(){</div><div data-lake-id="29a1202484cf97d1819dc5b3393654dd">      return fn.apply(privates, arguments);</div><div data-lake-id="d2a2345afb9d1f5cbbe94212e26d6943">     };</div><div data-lake-id="3b4852ed60b0eb953713f2c0ef5d2673">    }(conf.constructor || new Function());</div><div data-lake-id="356b73d4f919ffe7a2f7c91d928f6c98">    return _injectAttribute(fn);</div><div data-lake-id="1dc90730f61ea4ecbfb616aca5d55c67">}</div><div data-lake-id="0c7de7cb8d2b8b9fc9341260bdbfcc21">var MyClass = createClass({</div><div data-lake-id="fabf92cf0dd07c54eeaea64f7dada22f">    constructor:function(){</div><div data-lake-id="6e55fb460eb151ca3bbe0688c970fc54">        console.log("constructor is called: " + this.message);</div><div data-lake-id="3f1e13d564ecfd6b15949b1b2fa6f55d">    },</div><div data-lake-id="68807d871b81a98771d5d21250dab82f">    publics:{</div><div data-lake-id="79378cede039f7b0f2c1a32612c8082e">        message:"Hello, World",</div><div data-lake-id="101d0c34644871f3e8b6473efb691144">        sayJavaScript:function(){</div><div data-lake-id="ea81853af687ae2c141bc4da26d452ba">            return this._message;</div><div data-lake-id="f2c47f9880bfff8bd4e13f6fcab48ee0">        },</div><div data-lake-id="3caf47844553d60f604a85b902811c64">        sayABAP:function(msg){</div><div data-lake-id="d25c0408ce1eddbd875f076266751a39">            return msg + ", " + this.ABAP();</div><div data-lake-id="dc9c172d52881b1496cb02dcc258c42b">        }</div><div data-lake-id="633f0cd0294c9f4a5e92c072695577b0">    },</div><div data-lake-id="7e9879a78675163d460ea0e42ec0594e">    privates:{</div><div data-lake-id="e3c4358f9410239b2ab7bd2cf3289047">        _message: "Hello, JavaScript",</div><div data-lake-id="43a61ae98a46ce8c651c07e4c2d7dad3">        ABAP :function(){</div><div data-lake-id="4ee3399f9232b71fa5a63c0cae313f86">            return "ABAP";</div><div data-lake-id="0238891eb11166c8bd2a5d1a537ba8b6">        }</div><div data-lake-id="9643aa3c9ed60aca60a52fbaae34fb1c">    }</div><div data-lake-id="ffedeefebafb0334617cc07be3f5e2d8">});</div><div data-lake-id="50f73e591a3277247e71aca12f915c5c">/*</div><div data-lake-id="5c3bb2661885455d157913f742c1dc4c">var myClassInstance = new MyClass();</div><div data-lake-id="afcd42041a0d6cfbd3ac9db2f2817f8a">console.log(myClassInstance.message);</div><div data-lake-id="eb18cd1d025faa436899e3c1806f7eab">console.log(myClassInstance.sayJavaScript());</div><div data-lake-id="790ce8adc68f2aa156f533c5db7384d5">console.log(myClassInstance.sayABAP("Hello"));</div><div data-lake-id="dbc8fa917940acbbacaff82e841c0f75">console.log(myClassInstance._message);</div><div data-lake-id="d69455717512b8a07f68941e83130f4e">console.log(myClassInstance.ABAP());</div><div data-lake-id="0f65d2ee1dbe3463d1ca31df4fa9ee8e">*/</div><div data-lake-id="d3a7cc4b2faee88d0c859cf3cd3515dc">class Developer {</div><div data-lake-id="69e1008d217307f449ce5e31e4044c3c">    constructor(name, language) {</div><div data-lake-id="e4e34952d848e5310a9f367009ba5fcc">        this.workingLanguage = language;</div><div data-lake-id="f184ad5e37db5c1d1864134d8ff15043">        let _name = name;</div><div data-lake-id="8e8af24e2a9a1abdccc622ec939cedeb">        let _getName = function() {  </div><div data-lake-id="83e70b97fd24025ebe79f452db77ee4a">            return _name;  </div><div data-lake-id="abafb519fc0910b8675494be54094a1f">        };</div><div data-lake-id="8c01cb9be8915558bbcb9c147d84897d">        this.getName = _getName;</div><div data-lake-id="3c0b7504bcaaa8ce41ef150d97d5242f">    }</div><div data-lake-id="5a6011881eba7d27c5317abe6fc81bae">}</div><div data-lake-id="77cc6b2fbe3bba52d38acdd3486e4c7d">var Jerry = new Developer("Jerry", "Java");</div><div data-lake-id="d16345e5ee18e71310131cca9ba70641">var Ji = new Developer("Ji", "JavaScript");</div><div data-lake-id="0449bac436389cfe8ca0371a693693b0">console.log("Developer name: " + Jerry.getName());</div><div data-lake-id="16347f21398f504c1676b95eae283f29">console.log("Jerry's working language: " + Jerry.workingLanguage);</div><div data-lake-id="839fed0149f1410003fcf2530ca48127">console.log("local function accessible? " + Jerry._getName);</div><div data-lake-id="4bc2144da46fa71463be5ece8da76845">console.log("Jerry's name: " + Jerry._name);</div><div data-lake-id="c10c61f83104c8c9b28143c3afa277a1">