前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript里类和私有属性的两种实现方式

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

作者头像
Jerry Wang
发布2020-03-19 18:27:42
4090
发布2020-03-19 18:27:42
举报
代码语言:javascript
复制
<html>
<script>
function createClass(conf){

    function _injectAttribute(fn){
        var prototype = fn.prototype;
        for(var publicName in publics){
            if(!publics.hasOwnProperty(publicName))
                continue;
            if(typeof publics[publicName]=="function")
                prototype[publicName] = function(publicName){
                    return function(){
                        return publics[publicName].apply(privates, arguments);
                    }
                }(publicName);
            else 
                prototype[publicName] = publics[publicName];
            if(!privates[publicName])
                privates[publicName] = prototype[publicName];
        }
        return fn;
    }

    var publics, privates;
        publics = conf.publics;
        privates = conf.privates || new Object();

    var fn = function(fn){
    	return function(){
    		return fn.apply(privates, arguments);
    	};
    }(conf.constructor || new Function());

    return _injectAttribute(fn);
}

var MyClass = createClass({
    constructor:function(){
        console.log("constructor is called: " + this.message);
    },
    publics:{
        message:"Hello, World",
        sayJavaScript:function(){
            return this._message;
        },
        sayABAP:function(msg){
            return msg + ", " + this.ABAP();
        }
    },
    privates:{
        _message: "Hello, JavaScript",
        ABAP :function(){
            return "ABAP";
        }
    }
});
/*
var myClassInstance = new MyClass();

console.log(myClassInstance.message);
console.log(myClassInstance.sayJavaScript());
console.log(myClassInstance.sayABAP("Hello"));
console.log(myClassInstance._message);
console.log(myClassInstance.ABAP());
*/

class Developer {
    constructor(name, language) {
        this.workingLanguage = language;
        let _name = name;

        let _getName = function() { 
            return _name; 
        };
        this.getName = _getName;
    }
}

var Jerry = new Developer("Jerry", "Java");
var Ji = new Developer("Ji", "JavaScript");

console.log("Developer name: " + Jerry.getName());
console.log("Jerry's working language: " + Jerry.workingLanguage);
console.log("local function accessible? " + Jerry._getName);
console.log("Jerry's name: " + Jerry._name);


</script>
</html> 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档