Javascript_函数复习+内置对象

整理之前学习一些视频的笔记

引入

var str=parseInt(prompt("请输入一个数字"));
  console.log(str);

为什么结果是NaN???
没转换成功,说明prompt(“请输入一个数字”)有问题

  var str=prompt("请输入一个数字");
  console.log(str);

结果显示为空

  var str=prompt("请输入一个数字");
  console.log(isNaN(str));

结果显示false,如果是false,说明此处-----prompt(“请输入一个数字”);------是NaN

var str=prompt("请输入一个数字");
  //用户没有输入内容
  if(str==""){
    console.log("您输入有误")
  }else{
    //用户输入内容了
    if(!isNaN(parseInt(str))){
      console.log("您输入的是一个数字");
      //调用一个函数,把这个数字传入到函数中,判断该数字是不是质数
    }else{
      console.log("您输入的不是一个数字");
    }
  }

//如何判断一个数字是质数

  var num=11;
    function isPrimeNumber(num){
      for(var i=2;i<=num/2;i++){
        if(num%i==0){
          return false;
        }
      }
      return true;
    }
   console.log(isPrimeNumber(num));

函数

把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了

函数作用:代码重用

函数的参数:
1.形参:函数定义的时候,函数名字后面的小括号里的变量
2.实参:函数调用的时候,函数名字后面的小括号里的变量或者值

返回值:

  • 函数中有return,函数有返回值
  • 函数中没有return,函数没有返回值
  • 没有明确返回值:函数中没有return或者return后面没有任何内容
  • 如果一个函数没有明确的返回值,接收这个函数,结果是undefined

无参数无返回值的函数
无参数有返回值的函数
有参数无返回值的函数
有参数有返回值的函数

arguments

  • 可以获取函数调用的时候,传入的实参的个数
  • arguments是一个对象,是一个伪数组
  • arguments.length—>是实参的个数
  • arguments[索引]---->实参的值

作用域

变量的使用范围

  • 全局作用域:全局变量在任何位置都可以使用的范围
  • 局部作用域:局部变量只能在某个地方使用—函数内

作用域链

在一个函数中使用一个变量,先在该函数中搜索这个变量,找到了则使用,找不到则继续向外面找这个变量,找到则使用,一直找到全局作用域,找不到则是undefined

  • 全局变量:只要是在函数外面声明的变量都可以看成或者是理解成是全局变量
  • 局部变量:在函数中定义的变量

预解析

在执行代码之前做的事情

  • 变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域的最上面
  • 函数中的变量声明,会提升到该函数的作用域的最上面(里面)
  • 如果有多对的script标签都有相同名字的函数,预解析的时候是分段的,互不影响

创建对象的不同的方式

  1. 调用系统的构造函数创建对象
    var 变量名=new Object();
  2. 自定义构造函数创建对象
  3. 字面量的方式创建对象

编程思想:把一些生活中做事的经验融入到程序中
面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程
面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果

面向对象特性:封装,继承(类与类,但是js没有类的概念),多态 (抽象性)

  • js只有封装,其他两个特性只能模拟
  • js不是面向对象的语言,但是可以模拟面向对象的思想
  • js是一门基于对象的语言:就是本身有对象,不需要去创建

万物皆对象

什么是对象?
灌输思想:有了对象,就有了…
看的见,摸得到,具体特指的某个东西
学生是类 黄学生是对象
小狗是一类的东西 我家的狗是对象

分析对象有什么特点

特征和行为

  • 对象:有特征和行为,具体特指的某一个事物
  • 对象:有属性和方法,具体特指的某个事物
  1. 调用系统的构造函数创建对象
var 变量名= new Object(); 
Object 是系统的构造函数  Array
  1. 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
  2. 字面量的方式创建对象
//实例化对象:小苏
    //创建对象,把对象放进变量obj里面去了
    var obj=new Object();
    //对象有特征--属性和行为----方法


    //添加属性----如何添加属性?   对象.名字=值;
    obj.name="nina";
    obj.age=18;
    obj.sex="女"

    //添加方法----如何添加方法?  对象.名字=函数;
    obj.eat=function(){
      console.log("我喜欢吃油炸榴莲凉拌臭豆腐和大蒜")
    };
    obj.play=function(){
      console.log("我喜欢玩飞机模型");
    };
    obj.cook=function(){
      console.log("切菜");
      console.log("洗菜");
      console.log("煮菜");
      console.log("出锅");
      console.log("放料");
      console.log("吃菜");
    }

   console.log(obj.name);//获取---输出了
   console.log(obj.age);
   console.log(obj.sex);
   obj.eat();//函数调用得加括号
   obj.play();
   obj.cook();
  1. 工厂模式创建对象
function createObject(name, age) {
      var obj = new Object();
      //添加属性
      obj.name = name;
      obj.age = age;
      //添加方法
      obj.sayHi = function () {
        console.log("你好呀,我叫" + this.name + "\n"+"我今年" + this.age+"岁了");
      };
      return obj;
    }

    //创建人的对象
    var per1 = createObject("aa", 18);
    per1.sayHi();
    //创建一个人的对象
    var per2 = createObject("bb", 19);
    per2.sayHi();

自定义构造函数创建对象,自己定义一个构造函数,自定义构造函数,创建对象

函数和构造函数的区别

名字是不是大写(首字母是大写)
用法没什么区别,几乎一模一样,构造函数也可以当作普通函数一样用

系统的函数:Object

function Object(value){}

注意:
如果写的是普通函数,主要是为了调用!!!
构造函数 目的 是为了 创建对象!!!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

   function Person(name,age) {
      //写了系统函数,也相当于不是自定义的
      //var obj=new Object();
      this.name = name;
      this.age = age;
      this.sayHi = function () {
        console.log("我叫" + this.name + ",年龄是" + this.age+"岁");
      }
      //return obj;
    }
   // Person();
   //自定义构造函数创建对象:先定义一个构造函数,创建对象
   var obj=new Person("lily",11);
   console.log(obj.name);
   console.log(obj.age);
   obj.sayHi();

   var obj2=new Person("john",12);
   console.log(obj2.name);
   console.log(obj2.age);
   obj.sayHi();
   
   console.log(obj instanceof Person);
   console.log(obj2 instanceof Person);

   //定义狗的构造函数,创建对象
   function Dog(name,age,sex){
     this.name=name;
     this.age=age;
     this.sex=sex;
   }
   var dog=new Dog("大黄",11,"男");
   console.log(dog instanceof Person);
   console.log(dog instanceof Dog);

定义构造函数创建对象做了几件事?

当这个代码执行时,发生了四件事!系统做的!

var obj=new Person("小明",10);
  1. 在内存中开辟(申请一块空闲的空间)空间,存储创建的新的对象
  2. this设置为当前的对象
  3. 设置对象的属性和方法的值
  4. this这个对象返回
    在这里插入图片描述
    //创建一个图片的对象,图片有宽,有高,有大小(4M),图片可以展示内容
    //创建一个小猫的对象,猫有颜色,体重,年龄,小猫可以抓耗子,可以打架
 function Picture(width, height, size) {
      this.width = width;
      this.height = height;
      this.size = size;
      this.showPicture = function () {
        console.log("宽是" + this.width + ",高是" + this.height + ",大小是" + this.size);
      }
    }

    function littleCat(color, weight, age) {
      this.color = color;
      this.weight = weight;
      this.age = age;
      this.fight = function () {
        console.log("颜色是" + this.color + ",体重是" + this.weight + ",年龄是" + this.age);
      }
    }

//1 调用构造函数创建对象

var obj=new Object();

//2. 自定义构造函数创建对象

//自定义构造函数

function Person(name,age) {
      this.name=name;
      this.age=age;
      this.sayHi=function () {
        console.log("您好,我叫:"+this.name);
      };
    }

//创建对象----实例化一个对象,并初始化

  var per=new Person("小明",20);
    per.name="张三";

再次强调四件事:
1.开辟空间,存储创建的新的对象
2.把this设置为当前的对象
3.设置对象的属性和方法的值
4.返回创建后新的对象

内存空间:对象的创建过程它的空间内存图如下:
在这里插入图片描述
对象到底占了几块空间?

两块!!一个是栈,一个是堆,
堆里面是对象,栈里面存的是该对象所在空间的地址或者说叫做引用!

字面量的方式创建对象

自定义构造函数可以通过instanceof来判断此对象属于什么类型的
在这里插入图片描述
字面量的方式创建对象

 var obj = {};//空对象
    //添加属性
    obj.name = "小白";
    obj.age = 10;
    obj.sayHi = function () {
      //添加方法
      console.log("我是:" + this.name);
    }
    obj.sayHi();

//缺陷:现在添加的所有属性和方法都是在大括号外面添加的
//如果说,我要是能够和数组一样…

//和数组一样都是在外面添加的

  var arr = [];
  arr[0] = 10;

//优化后的写法:(是一个整体)
//等号变成了冒号,分号变成了逗号

  var obj2={
      name:"小明",
      age:20,
      sayHi:function(){
       console.log("我是"+this.name);
      },
      eat:function(){
      console.log("吃了")
      }
    } 
     
     obj2.sayHi();
     obj2.eat();
    //类似数组
    var arr=[10,20,30]

//字面量创建对象的缺陷: 一次性的对象

var obj={
     name:"晨光",
     age:18,
     sex:"女"
   };
   obj.name="爱心"
   console.log(obj.name)

//这个不太好,自定义构造函数比较好,因为可以通过参数来改值
//一开始创建对象的时候传值,而这种方式不可以
//总结缺陷:一次性的对象

点语法
对象.名字=值;对象.名字=函数;

js学习中三种对象:
1.内置对象----js系统自带的对象
2.自定义对象—自己定义的构造函数创建的对象
3.浏览器对象—BOM

内置对象:

  • Math
  • Date
  • String
  • Array
  • Object

//如何验证变量是不是对象

console.log(Array instanceof Object);
      var obj={};
console.log(obj instanceof Object);

浏览器控制台显示结果
true
true

实例对象:通过构造函数创建出来,实例化的对象
静态对象:不需要创建,直接就是一个对象,方法(静态方法)直接通过这个对象名字调用,
实例方法必须通过实例对象调用
静态方法必须通过大写的对象调用

  • Math.PI----π—
  • Math.E----常数的底数
  • Math.abs(值)-----绝对值
  • Math.ceil(值)----向上取整
  • Math.floor(值)—向下取整
发布了182 篇原创文章 · 获赞 33 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42554191/article/details/104029058