欢迎光临散文网 会员登陆 & 注册

JS定义类和属性,封装继承和多态,保护属性,私有属性,作业,friendly【诗书画唱】

2021-04-12 17:48 作者:诗书画唱  | 我要投稿

目录(下面的词条是按顺序的,想看一个词条的结尾,就CTRL+F下一个词条):

(第1,2,3题)创建一个Person类,包含name公开的属性,age受保护的属性,这个值只能是数字,私有的属性account。

创建一个showMoney私有的方法,在这个方法中打印出account的值。

创建一个showMsg公开的方法,在这个方法中打印出name和age,并且调用showMoney方法。

我写的题目答案:第1,2,3题.html


(第4题)创建一个交通类Trafic和它的两个子类Car和Bike,通过多态实现每种交通工具的run方法。

我写的题目答案:第4题(代码多的方法).html

我写的题目答案:第4题(代码少的方法).html


个人笔记

friendly



实例代码

定义类和属性.html

多态.html

封装继承和多态.html

注释:

同色的“

个人笔记

friendly

表示friendly”词条在“个人笔记”词条里面


(第1,2,3题)创建一个Person类,包含name公开的属性,age受保护的属性,这个值只能是数字,私有的属性account。

创建一个showMoney私有的方法,在这个方法中打印出account的值。

创建一个showMsg公开的方法,在这个方法中打印出name和age,并且调用showMoney方法。

我写的题目答案:第1,2,3题.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>


//创建Person类

var Person = function(name,age,account){


//定义一个公有的属性:

this.name = name;


//定义一个公有的方法:

this.showMsg= function(){

//打印出name和age,并且调用showMoney方法:

console.log('name:'+name+",age:"+age);

showMoney();

}


//定义一个受保护的属性age :

Object.defineProperty(this,'age',{

get: function(){


console.log('调用了get方法');

return 'age的值是:' + age;

},

set: function(val){

console.log('调用了set方法');

//用if判断限制这个值只能是数字:

if(!isNaN(val)) {

age = val;

}

}

});


//定义了一个私有的属性account:

//私有的属性在类的外部是无法访问的:

var _account= account;


//私有方法在类的外部是无法访问的:

var showMoney= function(){

console.log(_account);

}


//在类的内部调用私有方法:

showMoney();


}


var p= new Person('诗书画唱',9,999.9);


          

//调用set方法(使用"点"和"赋值")(这里的set方法可以不调用,要修改age值时才调用):           

 p.age = 9;

 

 //调用get方法(使用"控制台打印"和"点"):

 console.log(p.age);


//私有的属性在类的外部是无法访问的,所以这里控制台打印的结果是undefined:

 console.log(p.account);

 //在类外部调用公有方法:

p.showMsg();

</script>

<body>

</body>

</html>


(第4题)创建一个交通类Trafic和它的两个子类Car和Bike,通过多态实现每种交通工具的run方法。

我写的题目答案:第4题(代码多的方法).html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>


//封装:

Object.copy = function(des,src){

for(var attr in src) {

des[attr] = src[attr];

}

return des;

};

Object.prototype.extend = function(o){

            return Object.copy(this,o);

            }



//定义父类:

  var Trafic = function(){};

  

            Trafic.prototype = {

            go: function(){

           

            this.run();

            },

            run: function(){}

            };

            

            

            

            

 //定义子类继承父类:

 //Car继承Trafic:

            var Car = function(){};

            var fuLei = new Trafic();

            var duoTaiFangFa = {

            run: function(){

            console.log('Car中调用run方法');

            }

            };

            Car.prototype = fuLei.extend(duoTaiFangFa);

            

 //多态调用方法:

            var r = new Car();

            r.go();            

            

            

    //Bike继承Trafic:         

             var Bike= function(){};

            var fuLei = new Trafic();

            var duoTaiFangFa= {

            run: function(){

            console.log('Bike中调用run方法');

            }

            };

            Bike.prototype = fuLei.extend(duoTaiFangFa);

    //多态调用方法:

            var r = new Bike();

            r.go();         



</script>

<body>

</body>

</html>


我写的题目答案:第4题(代码少的方法).html


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<script>

//父类:

var Trafic = function(type){

type.run();

}




//子类:

var Car = function(){};

Car.prototype.run = function(){

console.log('Car中调用run方法');

}

//调用:

Trafic(new Car());




//子类:

var Bike = function(){};

Bike.prototype.run = function(){

console.log('Bike中调用run方法');

}

//调用:

Trafic(new Bike());


</script>

<body>

</body>

</html>




个人笔记



friendly就是“友好的”


访问权限修饰符权限从高到低排列是public  ,protected  ,friendly, private。


用原型添加的属性或调用属性
这里的“src”和“des”都是传的参数
其实这里的写法也是实现多态的方法之一

实例代码

定义类和属性.html


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script>

//创建了一个Animal类

var Animal = function(name,type,color){

//定义了一个private _type

//_type在Animal类的外部是无法访问的

var _type = type;

//私有的方法

//isAnimal方法在Animal类的外部是无法访问的

var isAnimal = function(){

console.log(_type === 'animal');

}

isAnimal();

//定义一个受保护的属性name

Object.defineProperty(this,'name',{

get: function(){

//在这里可以写一段判断逻辑,来保护name属性不会被随便获取到

console.log('调用了get方法');

return '动物的名字是:' + name;

},

set: function(val){

console.log('调用了set方法');

if(val) {

name = val;

}

}

});

//定义一个公有的属性和方法

this.color = color;

this.eat = function(){

console.log('正在吃东西');

}

this.age = 5;

}


Animal.prototype.age = 2;

Animal.prototype.play = function(){

console.log('正在玩耍');

}

//定义Animal类的静态的属性和方法

Animal.total = 47;

Animal.count = function(){

return Animal.total;

}

//创建一个Animal对象

var cat = new Animal('大黄','猫','黄色');

cat.name = '花花';

console.log(cat.name);

console.log(cat.color);

cat.eat();

console.log(cat.age);

cat.play();

console.log(Animal.total);

console.log(Animal.count());

</script>

</head>

<body>

</body>

</html>

多态.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script>

var shape = function(type){

type.draw();

}

var Rect = function(){};

Rect.prototype.draw = function(){

console.log('矩形');

}

shape(new Rect());

var Circle = function(){};

Circle.prototype.draw = function(){

console.log('圆形');

}

shape(new Circle());

</script>

</head>

<body>

</body>

</html>

封装继承和多态.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script>

//给Object类定义了一个静态的方法

//将src对象中的属性和方法复制到des对象中去

Object.copy = function(des,src){

for(var attr in src) {

des[attr] = src[attr];

}

return des;

};

var father = {

money: 200000,

house: 1,

work: function(){

console.log('正在工作');

}

};

var son = {

name: '小明'

}

// var s = Object.copy(son,father);

// console.log(s);

            Object.prototype.extend = function(o){

            return Object.copy(this,o);

            }

            var s = son.extend(father);

            //console.log(s);

            

            var Shape = function(){};

            Shape.prototype = {

            draw: function(){

            //通过调用_d空方法来实现多态

            this._d();

            },

            _d: function(){}

            };

            //定义了一个矩形类继承Shape

            var Rect = function(){};

            var sp = new Shape();

            var f = {

            _d: function(){

            console.log('绘制一个矩形');

            }

            };

            Rect.prototype = sp.extend(f);

            //多态调用draw方法

            var r = new Rect();

            r.draw();

            

//          var Circle = function(){};

//          Circle.prototype = sp.extend({

//          _d: function(){

//          console.log('绘制一个圆形');

//          }

//          });

//          var c = new Circle();

//          c.draw();

</script>

</head>

<body>

</body>

</html>




JS定义类和属性,封装继承和多态,保护属性,私有属性,作业,friendly【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律