js---OOP浅谈

对象化编程-------简单地去理解就是把javascript能涉及到的范围分成各种对象,对象下面再次划分对象。编程出发点多是对象,或者说基于对象。所说的对象既包含变量,网页,窗口等等
 
对象的含义
          对象可以是文字,表单等等。对象包含一下
属性-------对象的某些特定的性质
方法-------对象能做的事情
事件-------能响应发生在对象上的事情
     注意:对象只是一种特殊的数据

     2.  基本对象
        
         我们一般划分的角度还是从数据类型这方面
Number
String
Array
Math
Data  
这边我只是简单地罗列出来部分,具体的可以参考http://www.w3school.com.cn/js/js_obj_intro.asp
 
不过我这边还是想讲一下比较流行的一道前端面试题,也是我当初来百度面试的时候问我的(题目的来源好像是方荣大侠的某个web前端研发工程师编程能力成长之路的文档里面的)
废话少说

出题:
                       “输出字符串--今天是星期几”

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

var _str = "";

var _today = new Date().getDay();

if(_today == 0){

   _str = "今天是星期日"

}else if(_today  == 1){

  _str = "今天是星期一"

}else if(_today  == 2){

  _str = "今天是星期二"

}else if(_today  == 3){

  _str = "今天是星期三"

}else if(_today  == 4){

  _str = "今天是星期四"

}else if(_today  == 5){

  _str = "今天是星期五"

}else if(_today  == 6){

  _str = "今天是星期六"

}

 

  

 

var _str ="今天是星期";

 

var _today=new Date().getDay();

switch(_today){

      case 0:

           _str += "日"

           break;

      case 1:

           _str += "一"

           break;

      case 2:

           _str += "二"

           break;

      case 3:

           _str += "三"

           break;

      case 4:

           _str += "四"

           break;

      case 5:

           _str += "五"

           break;

      case 6:

           _str += "六"

           break;

  

}

 

 

var _str = "今天是星期"+"日一二三四五六".charAt(new Date().getDay());

  


 3.
下面介绍创建类和对象的模式
简单方式
        

1

2

3

4

5

6

7

8

9

var people ={};

Js代码

      people.name = "steven";

      people.age = 23;

      people.getName = function(){

           return "People's name is "+ this.name;

     };

console.log(people.getName());          //People's name is steven

console.log(people.age);                    //23

  


不好的地方就是:在创建多个对象的场景下会产生 很多冗余的代码,耦合度不高 
 

工厂模式下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function makePeople(name,age,job){

     var _obj = {};

     _obj.name = name;

     _obj.age =age;

     _obj.job = job;

    _obj.getName = function(){

        return "People's name is "+ this.name;

   

    return _obj;

}

  

var webdesigner = makePeople("steven",23,"wendesigner");

console.log(webdesigner.getName );       //People's name is steven

console.log(webdesigner.job)                //wendesigner

  


 

Js代码 
不好的地方就是:实例化比较频繁 

原型模式(prototype)下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function People(){};

People.prototype = {

       constructor :People,

       name:"steven",

       age:23,

       job:"webdesigner",

       getName:function(){

             return "People's name is "+this.name;

      }

}

  

var webdesign = new People();

var carman = new People();

console.log(webdesign.getName());    //People's name is steven

console.log(carman.getName());    //People's name is steven

  


 
Js代码 
不好的地方就是:初始化参数不支持传递,还有就是原型的所有属性和方法会被所有的实例共享 

混合模式(原型+构造函数)下
 
 
 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

function People(name.age.job){

Js代码

this.name = name;

Js代码

       this.age = age;

       this.job = job;

};

People.prototype = {

      constructor:People,

      getName: function(){

           return "People's name is "+this.name;

      }

}

  

var webdesigner  = new People("steven",23,"webdesigner");

var carman = new People("zyc",24,"carman");

console.log(webdesigner.getName())   //People's name is steven

console.log(carman.getName())   //People's name is zyc

  


 
Js代码 
不好的地方就是:对象的属性和方法也多是公用的 
 
 
闭包下的私有变量模式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

(function(){

    var name ="";

    People = function(val){

        name = val;

   };

    People.prototype ={

       constructor:People,

       getName:function(){

              return "People's name is "+ name ;

      }

   };

})();

  

  

var webdesigner = new People("steven");

console.log(webdesigner.name);           //undefined

console.log(webdesigner.getName());      //People's name is steven

  

var carman= new People("zyc");

console.log(carman.name);           //undefined

console.log(carman.getName());      //People's name is zyc

  

Js代码 
不好的地方就是:初级程度代码不是很让人理解 

转载自: 作者“zhangyaochun”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值