JavaScript小白最全学习笔记(5)

方法

//函数也可以称为对象的属性 //如果一个函数作为一个对象的属性保存 //那我们称这个函数是这个对象的方法 //调用document的write方法 document.write(); //调用函数就称调用函数的方法(Method)

//创建一个对象 var obj1 = new Object(); //向对象中添加属性 obj1.name = "猪头"; obj1.age = 19; //对象的属性值可以是任何的数据类型,也可以是个函数 obj1.SayName = function(){ console.log(obj1.name); } 函数 function hah(){ console.log(obj1.name); } //调用obj1的SayName方法 obj1.SayName(); //调函数 hah() //本质上是一样的


var obj = { name:"猪", age:18, SayName:function(){ console.log(obj.name); } }; obj.SayName();

枚举对象中的属性
JavaScript小白最全学习笔记(5)
文章图片

var obj = { name:"猪", age:18 } for(var n in obj){ console.log("属性名:"+ n); console.log("属性值:"+ obj[n]); }

作用域
  • 1.全局作用域
(1)直接在Script标签中的js代码,都在全局作用域
(2)在页面打开时创建, 在页面关闭时销毁
(3)在全局作用域中:
a.创建的变量都会作为window对象的属性保存
b.创建的函数都会作为window对象的方法保存
变量的声明提前
使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会被赋值)
函数的声明提前
(1)使用函数声明形式创建的函数function 函数 (){}在所有代码执行之前先被执行,所以可以在函数声明前被调用
//函数声明,会被提前创建 a(); function a(){ console.log("hhh"); }

(2)使用函数表达式创建的函数不会被提前声明
//函数表达式,不会被提前创建 var aa = function (){ alert("edfrewd"); } aa();

  • 2.函数作用域
(1)调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
(2)每调用一次函数就会创建一个新的函数作用域,他们之间时互相独立的
(3)在函数作用域中可以访问到全局作用域的变量
//函数作用域的变量访问全局 var a = 10; function b(){ console.log(a); } b();

(4)在全局作用域中无法访问到函数作用域的变量
//全局无法访问函数作用域的变量 function fun(){ var b = 20; } console.log("b:"+ b);

Uncaught ReferenceError: b is not defined
变量的声明提前
使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会被赋值)
(4)在函数中,不适用var声明的变量都会成为全局变量
this 解析器在调用函数每次都会向函数内部传递进一个隐含的参数 -->this,指向的是一个对象,这个对象我们称为函数的上下文对象,根据函数的调用方式的不同,指向不同的对象。
1.以函数的形式调用,this永远都是window
2,以方法的形式调用,this就是调用方法的那个对象
使用工厂方法创建对象 可以大批量的创建对象
function factory(name, age, gender){ var obj = new Object(); obj.name = name; obj.age = age; obj.gender = gender; return obj; } var obj2 = factory("臭臭", 22, "男"); var obj3 = factory("大臭臭",22, "男"); var obj4 = factory("小臭臭", 22, "男"); console.log(obj2); console.log(obj3); console.log(obj4);

JavaScript小白最全学习笔记(5)
文章图片

构造函数 局限:使用工厂方法创建的对象,使用的构造函数都是Objet,所以创建的对象都是Object这个类型,就导致我们无法区分出多种不同类型的对象。
创建一个构造函数,专门用来创建person对象
构造函数就是一个普通的函数,创建方式和普通的人函数没什么分别,不同的是:
(1)构造函数习惯上首字母大写
(2)调用方式不同:
a:普通函数,直接调用
b:构造函数需要使用new关键字调用
构造函数的执行流程:
1.立即创建一个新的对象
2.将创建的对象设置为函数中的this,在构造函数中可以使用this来使用来引用新的对象
3.逐行执行函数中的代码
4.将新建的对象作为返回值返回
【JavaScript小白最全学习笔记(5)】this即为新创建的per
//构造函数 //开头大写 //使用new调用 function Person(name, age, gender){ this.name = name; this.age = age; this.gender = gender; } var per = new Person("猪猪", 18, "男"); console.log(per);

使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类
我们将通过一个构造函数创建的对象,称为该类的实例
使用instanceof 可以检查一个对象是否是一个类的实例
//对象 instanceof 构造函数 //语法: 对象 instanceof 构造函数 返回 true/false console.log(per instanceof Person);

    推荐阅读