js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别

311 篇文章 3 订阅
205 篇文章 0 订阅

出处:http://my.oschina.net/tongjh/blog/265087?p={{currentPage-1}}
代码有利于理解,我都写注释了,直接上代码
<html>
    <head>
    <meta http-equiv="Content-Type"content="text/html; charset=utf-8">
        <title>test</title>
    </head>
    <body>
        <script>
       
//对象构造函数
        function Atest(name){
            //私有属性,只能在对象构造函数内部使用
            var className = "Atest";
            //公有属性,在对象实例化后调用
            this.name = name;
            //对象方法
            this.hello = function(){
                alert(this.name);
                alert(this.msg());  //使用原型方法扩充的方法可以在类内部使用
                alert(this.sex);    //使用原型方法扩充的属性可以在类内部使用
                alert(Atest.age);  //静态属性调用时格式为[对象.静态属性]
            }
        }
        //类方法 (公有静态方法),是静态方法直接调用。 语法格式:类名称.方法名称 = function([参数...]){ 语句行; }
        Atest.Run = function(){
            alert("我是类方法 Run");
        }
      //类属性 (公有静态属性)
      Atest.age = 20; //公有静态属性不能使用 【this.属性】,只能使用 【对象.属性】 调用
 
        //原型方法 (公有共享方法)
        Atest.prototype.msg = function(){
            alert("我的名字是:"+this.name);//如果原型方法当作静态方法直接调用时,this.name无法被调用
        }
        //原型属性 (公有共享属性),当作是类内部的属性使用【this.原型属性】,也可以当成公有静态属性使用【对象.prototype.原型属性】
        Atest.prototype.sex = "男";
 
        Atest.Run();                           //类方法也是静态方法,可以直接使用 【对象.静态方法()】
        Atest.prototype.msg();           //原型方法当成静态方法使用时【对象.prototype.方法()】
        alert(Atest.prototype.sex);      //原型属性当作静态属性使用时【对象.prototype.方法()】

        var a = new Atest("zhangsan");//对象方法和原型方法需要实例化对象后才可以使用
        a.hello();                              //对象方法必须实例化对象
        a.msg();                                //原型方法必须实例化对象
        alert(a.age):                          //错误,公有静态属性只能使用 【对象.属性】调用

        //ps:尽量将方法定义为原型方法,原型方法避免了每次调用构造函数时对属性或方法的构造,节省空间,创建对象快.
    </script>
    </body>
</html>

再来一个
http://yanhaijing.com/javascript/2014/05/15/a-code-explain-javascript-oop/

(function(){
	//私有静态成员
	var user = "";
	
	//私有静态方法
	function privateStaticMethod(){
	}

	
	Box = function(value){
		//私有成员
		privateStaticUser = value; 
		
		//这个是私有方法
		function privateMethod(){
		}

		
		//公有方法,因为能访问私有成员,也可以说是特权函数,也可以说是实例方法
		this.getUser = function(){
			return user;
		};		
		
		//公有成员
		this.user = 1;
	};
	
	//公有共享访问
	Box.prototype.sharedMethod = function () {};
	
	//公有共享属性
	Box.prototype.sharedProperty = function () {};

	
	//公有静态方法 
	Box.staticMethod = function(){};
	
	//公有静态成员
	Box.staticProperty = 1; 
})();



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值