函数调用.对象(10.20)

作业题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,请编写一个函数,传入原文,输出密文

 function secret(n){
            let num1,num2,num3,num4,temp,temp1;
            num1 = ((n % 10) + 5) % 10;
            num2 = ((parseInt(n % 10) % 10) + 5 ) % 10;
            num3 = ((parseInt(n / 100) % 10) + 5) % 10;
            num4 = ((parseInt(n / 1000)) + 5) % 10;
            temp = num1;
            num1 = num4;
            num4 = temp;
            temp1 = num2;
            num2 = num3;
            num3 = temp1;
            let str = `${num4}${num3}${num2}${num1}`
            return str
        }
        let n = +prompt("输入四位整数");
        console.log(n);
        console.log(secret(n));
        

         //第二种方法
         function getPassword(str){
            let pwd = '';
            for(let i = 0;i < 4;i++){
                let char = str[i]  //char变量中存放的是数字字符(单引号括起来的数字)---'1'
                let p1 = (chasr*1+5) % 10;  //char*1:将数字字符转换成整数---只有number类型数据才能进行算数的运算
                pwd += p1  //pwd:6789 ---> 9876
            }
            return `${pwd[3]}${pwd[2]}${pwd[1]}${pwd[0]}`
         }
         let st = getPassword('1234');

1、电话号码的数据类型:'85647896'、'13578945621'
2、数字与数组字符的区别:
(1)数字(0、1、2、3、4、5、6、7、8、9):ASCII码值是它本身
(2)数字字符:用单引号括起来的数字('0'、'1'、'2'、'3'......),ASCII码值(‘0’是48)
(3)数字字符和数字之间的转换
                 '1'-'0' ----> 49 - 48 = 1
                  '2'-'0' -----> 50 - 48 = 2
3、字符串是以数组的形式存放的:在访问字符串中某个字符时可以通过"数组名[下标]"的方式来访问

二、函数表达式
概念:将定义的函数赋给一个变量,通过变量完成函数的调用和参数传递(即函数是匿名的)
1.定义:
             var/let/const 变量名 = function(【参数】){
                                     函数体语句
}

2.调用   变量名(【参数】)
例:

let min = function(val1,val2){
            if(val1 < val2){
                return val1
            }else{
                return val2
            }
        }
        
let  t = min(12,25)
console.log('最小数:',t)

三、函数的递归调用(重点  难点)

1、递归调用:函数自己调用自己(即在函数的函数体语句中调用自己)

2、递归算法:
(1)用递归方式解决问题的前提
              a、问题可以进行分解,分解得到的新问题的解法与原问题的解法相同
                        8! --> 8* 7! --->7 6!-->.......2!-->2 * 1!
              b、问题的分解过程必须有明确的结束条件
(2)递归的过程
              a、自上而下分解问题:得到最简单的问题的解
              b、自下而上回溯得到原问题的解

3、代码实现:
例:用递归函数计算 n!(n的阶乘)
 

function fun(n){
            //1.明确递归结束的条件
            if(n == 0){
                return 1
            }else{
                //2.继续分解n
                return n * fun(n - 1);  //函数自己调用自己:在调用过程分解问题
            }
        }
        let m = fun(5);
        console.log("5!=",m);

练习1.定义递归函数,计算1+2+3....+100的值
 

 function fun(n) {
            if (n == 1) {
                return n
            } else {
                return fun(n - 1) + n;
            }
        }
        let m = fun(100);
        console.log('之和=', m);

四、对象
 
1.定义:对象是一种数据类型(复合数据类型),对象中包含了属性和方法
 (1)属性:表示对象的静态特征。使用方式为 “ 对象名.属性名”
 (2)方法(函数):表示对象的行为(动态特征)。使用方式为“对象名.方法名(【参数】)”

2、对象的创建方式:
(1)使用字面量创建:{ }
          let / var / const 对象名 = { }
例:

let student = {
            no:'wn001',
            name:'马云',
            sex:'男',
            eat:function(){
                console.log('马云在吃包子');
            },
            sleep:function(){
                console.log('马云在睡觉');
            }
        }

对象的属性和方法的使用
例:

 console.log('姓名:'+student.name);
        console.log('性别:'+student.sex);
        student.eat();
        student.sleep();

说明:
(1)保存数据的格式:键: 值(key:value) ---- 称为“键值对”
(2)在程序中可以创建空对象:对象名 = { }
(3)给空对象添加属性、方法

3、通过Object来创建对象:
(1)Object对象:是JavaScript中所有对象的基类
(2)创建空对象:new Object()

 //通过object创建对象
        let obj = new Object();
        console.log(obj);
        obj.name = '诸葛亮';
        obj.sex = '男';
        obj.info = function(m,n,t){
            console.log('空城计');
        }
        console.log(obj);

练习2.通过object创建一个对象,该对象的属性有:bookld,bookName,publishing

        包含的方法有:
                     setBookName(name):修改bookName属性值
                     setPublishing(publishing):修改publishing属性值
                     showBookInfo():显示图书信息

 let obj = new Object()
        obj.bookId = '001'
        obj.bbokName = '三国演义'
        obj.publishing = '商务印书馆'
        obj.setBookName = function (name) {
            this.bookName = name //this代表当前对象obj
        }
        obj.setPublishing = function (publishing) {
            this.publishing = publishing
        }
        obj.showBookInfo = function () {
            console.log('图书编号:', this.bookId);
            console.log('图书名称:', this.bookName);
            console.log('出版社:', this.publishing);
        }

        obj.showBookInfo()
        console.log('-----------------------------');
        obj.setBookName('水浒传');
        obj.setPublishing('机械工业出版社');
        obj.showBookInfo();


第二种

 let book = new Object({
          bookId: '001',
          bookName: 'ABC',
          publishing: '电子工业',
          setBookName:function(name){
            this.bookName = name
          },
          setPublishing:function(publishing){
            this.publishing = publishing
          },
          showBookInfo:function(){
            let str = `图书编号:${this.bookId}\n图书名称:${this.bookName}\n出版社:${this.publishing}`
            console.log(str)
          }
       }) 

       book.showBookInfo()
       console.log('--------------------------')
       book.setBookName('红楼梦')
       book.setPublishing('北大出版社')
       book.showBookInfo()

4.利用构造函数创建对象

(1)构造函数:是一个函数(定义方式和普通函数的定义方式一样的)
function 构造函数名(【参数】){
                           this.属性名 = 属性值
                             this.方法名 = function(【参数】){
                                           方法体语句
           }
}

建议:构造方法名的首字母要大写

定义构造方法就是画图纸的过程,通过构造方法创建对象(new 构造方法名())就是根据图纸生成对象的过程
(2)通过构造方法创建对象:new 构造方法名(【参数】)
(3)对象使用属性和方法:
               对象名.属性
              对象名.方法名(【参数】)
1.定义一个构造方法:包含name、sex、address三个属性,setName(name)、setSex(sex)、setAddress(address)三个方法

 function Student(){   //类似于画图纸
            this.name = '王昭君'
            this.sex = '女'
            this.address = '西安'

            this.setName = function(name){
                this.name = name
            }
            this.setSex = function(sex){
                this.sex = sex
            }
            this.setAddress = function(address){
                this.address = address
            }
        }

利用构造方法创建对象

let s1 = new Student()  //强调:构造方法中的this代表当前创建的对象s1

         console.log('姓名:',s1.name)
         console.log('性别:',s1.sex)
         console.log('地址:',s1.address)

         let s2 = new Student()  //this代表s2
         s2.setName('西施')
         console.log('姓名:',s2.name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值