js基础 JavaScript简称:JS
JS分三个部分:
- ECMAScript标准---基础的语法
- DOM Document Object Model 文档对象模型
- BOM Browser Object Model 浏览器对象模型
什么是JS? 前面的文章有更详细的解释,自行查找
- 是一门脚本语言
- 是一门解释性语言
- 是一门弱类型语言
- 是一门基于对象的语言
- 是一门动态类型的语言
动态页面 :页面由 html + css + js
组成,客户端向服务器发送请求,服务器那边没有页面,是动态的生成,返回给客户端。
js最初的目的 : 解决用户和服务器之间的交互问题。
js现实应用 : 做特效,游戏,移动端,服务端。
编程思想
面向过程:所有的事情都是亲力亲为,注重的是过程。
面向对象:提出需求,找对象,对象解决,注重的是结果。
js不是一门面向对象的语言,是基于对象的语言,js来模拟面向对象。
面向对象的特性:封装,继承,多态,(抽象性)
封装:
就是包装,把一些重用的内容进行包装,在需要的时候,直接使用
把一个值,存放在一个变量中,把一些重用的代码放在函数中,把好多相同功能的函数放在一个对象中,把好多功能的对象,放在一个文件中,把一些相同的内容放在一个对象中
继承:
类与类之间的关系,js中没有类的概念,js中有构造函数的概念,是可以有继承的,是基于原型
多态:
同一个行为,针对不同的对象,产生了不同的效果
创建对象三种方式
- 字面量的方式
- 调用系统的构造函数
- 自定义构造函数方式
// 自定义构造函数方式
function Person (name,age,sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayHi = function() {
console.log("你好!!!");
}
}
// 创建对象 -- 》 实例化一个对象的同时对属性进行初始化
var per = new Person("萌嘟嘟",20,"女");
自定义构造函数方式创建对象都做了哪些工作???
- 开辟空间存储对象
- 把this设置为当前的对象
- 设置属性和方法的值
- 把this对象返回
总结:
共同点: 都是函数,都可以创建对象,都可以传入参数
不同点:
1、工厂模式:函数名是小写的;有new,并且有返回值;new之后的对象是当前的对象;直接调用函数就可以创建对象
2、自定义构造函数方式:函数名是大写的(首字母大写);没有new,并且没有返回值;this当前的对象;通过new的方式创建对象
实例对象和构造函数之间的关系是什么???
- 实例对象是通过构造函数来创建的---创建的过程叫实例化
- 如何判断对象是不是这个数据类型?
(1). 通过构造器的方式 实例对象.构造器==构造函数名字
(2). 对象 instanceof 构造函数名字,尽可能的使用这种方式来识别
原型 (重点)
通过原型来解决---------数据共享,节省内存空间,作用之一
- 实例对象中有
__proto__
这个属性,叫原型,也是一个对象,这个属性是给浏览器使用,不是标准的属性----->__proto__
----->可以叫原型对象。 - 构造函数中有
prototype
这个属性,叫原型,也是一个对象,这个属性是给程序员使用,是标准的属性------>prototype
--->可以叫原型对象。 - 实例对象的
__proto__
和构造函数中的prototype
相等--->true
,又因为实例对象是通过构造函数来创建的,构造函数中有原型对象prototype
,实例对象的__proto__
指向了构造函数的原型对象prototype
。
总结
实例对象中有个属性, __proto__
,也是对象,叫原型,不是标准的属性,浏览器使用的
构造函数中有一个属性,prototype
,也是对象,叫原型,是标准属性,程序员使用
原型: __proto__
或者是prototype
,都是原型对象,
原型的作用: 共享数据,节省内存空间
构造函数、实例对象、原型对象三者之间的关系???
- 构造函数可以实例化对象
- 构造函数中有一个属性叫
prototype
,是构造函数的原型对象 - 构造函数的原型对象(
prototype
)中有一个constructor
构造器,这个构造器指向的就是自己所在的原型对象所在的构造函数 - 实例对象的原型对象(
__proto__
)指向的是该构造函数的原型对象 - 构造函数的原型对象(
prototype
)中的方法是可以被实例对象直接访问的
原型语法
function Student(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
//简单的原型写法
Student.prototype = {
//手动修改构造器的指向
constructor:Student,
height: "188",
weight: "55kg",
study: function () {
console.log("学习好开心啊");
},
eat: function () {
console.log("我要吃好吃的");
}
};
var stu=new Student("萌萌哒",18,"girls");
stu.eat();
stu.study();
console.dir(Student);
console.dir(stu);
原型中的方法,是可以相互访问的。
原型对象中的方法,可以相互调用。
实例对象使用的属性或者方法,先在实例中查找,找到了则直接使用,找不到则,去实例对象的__proto__
指向的原型对象prototype
中找,找到了则使用,找不到则报错