javascript的基础知识及面向对象和原型属性
自己总结一下javascript的基础知识,希望对大家有用,也希望大家来拍砖,毕竟是个人的理解啊
1.1 类型检查:typeof(验证数据类型是:string
)
var num = 123;
console.log(typeof num); //
1.2 in 运算符
作用:判断指定属性是否存在于指定的对象中。 如果指定的属性存在于指定的对象中,则 in 运算符会返回 true。 语法:
属性 in 对象 返回值:true 或者 false 示例:
var obj = {
age: 18
};
var hasAge = "age" in obj;
console.log(hasAge); //
- 问题:如何判断对象存在某个属性或方法?
1 in
2 浏览器能力检测
1.3 值类型和引用类型(重要)
值类型:变量中存储的是数值本身
引用类型:变量中存储的是数据的引用(地址) 对象中的属性可以是值类型也可以是引用类型
- 面试题
var o = new Object();
function foo(obj) {
obj.name = "腐女";
obj = new Object();
obj.name = "屌丝";
}
foo(o);
console.log(o.name); //
1.4 逻辑中断
||
如果第一个为真 就返回第一个表达式, 如果为假 则返回第二个表达式
&&
如果第一个为假 就返回第一个表达式, 如果为真则返回第二个表达式
- 练习:
function fn(num) {
// 如果传入num,就打印num的值
// 如果没有传入 就打印 没有参数
}
1.5 delete
作用:删除一个对象的属性。
语法:delete 属性名
返回值: true 或 false 用法:
1 删除数组中的元素
2 删除对象的属性或方法
3 删除没有用 var 声明 变量
1.6 try-catch
// 语法:
try {
// 可能出现错误的代码
} catch ( e ) {
// 出现错误会执行这里的代码
} finally { // 可选
// 无论是否出现异常, 最后执行
} // 手动抛出异常
throw new Error("别瞎搞");
throw "这都行???";
1.7 函数声明和函数表达式的区别
- 函数声明不允许出现在其他中
// 函数声明
function foo() {} // 函数表达式
var foo = function foo() {}; // 不推荐这么做!!
if(true) {
function f() {
console.log(true);
}
} f();
概念:语句和表达式
表达式:(有值)
表达式(expression)是JavaScript中的一个短语,JavaScript解释器会将其计算出一个值。
表达式可以是:数据 或者 数据和运算符的组合
例如:1、"abc"、true、1 + 2、i++、a === b ? a : b 、a = 1 语句:(带分号)
语句是JavaScript的句子或命令,以分号结束。
var a = 1;
2. 面向对象
2.1 为什么要面向对象?
面试中如何回答,什么是面向对象?
- 1 面向对象和面向过程的异同
- 2 在JavaScript中面向对象的表现形式
- 3 其他语言中面向对象的表现形式(了解)
2.1.1 面向对象和面向过程的区别
- jQuery创建对象和js创建对象对比
// jQuery
$("body").append("<p>jQuery创建节点就是如此潇洒</p>"); // js
var p = document.createElement("p");
var txt = document.createTextNode("creat E..,creat T..真麻烦");
p.appendChild(txt); document.body.appendChild(p);
- 面向对象和面向过程解释
面向过程:所有的细节、步骤、过程,要一步一步亲历亲为(执行者)
面向对象:找到能完成这个事情的对象,让它帮你完成就行(调度者) 生活中的例子:
做饭(叫外卖)
开公司
问题:面向对象这么好,面向过程就没用了?面向对象是对面向过程的一个封装
案例:给div和p添加红色边框
// 通过标签名获取元素
function tag(tagStr) {
return document.getElementsByTagName(tagStr);
} var divs = tag("div");
for(var i = 0; i < divs.length; i++) {
divs[i].style.border = "1px dotted red";
} var ps = tag("p");
for(var i = 0; i < ps.length; i++) {
ps[i].style.border = "1px dotted red";
}
- 练习:写一个通过id属性获取元素的函数
2.1.2 函数封装的问题
- 1 全局污染(变量在全局范围内有效)
- 2 大量的函数无法管理
- 3 使得维护变得困难
2.1.3 使用面向对象方式组织代码
// 使用对象
var itcast = {
id: function(idStr) {
return document.getElementById(idStr);
},
tag: function(tagStr) {
return document.getElementsByTagName(tagStr);
}
};
2.2 面向对象优势(解决函数封装问题)
- 封装代码,使代码更好维护
- 减少全局污染
- 将功能相近的代码组织到一起维护方便,找错方便
var itcast = {
// 元素获取模块
getElem: {
tag: function() {},
id: function() {}
},
// 样式模块
css: {
addStyle: function() {},
removeStyle: function() {},
hasStyle: function() {}
}
};
2.2.1 面向对象的基本模型
- 1 将数据与功能封装成函数(方法)
- 2 将相关的功能绑定到一起(对象)
- 3 将功能进行分组(模块)
3. 常用DOM操作
3.1 四字总结:增删改查
3.1.1 获取元素操作
getElementById getElementsByTagName getElementsByClassName
3.1.2 元素节点操作
appendChild insertBefore removeChild replaceChild cloneNode
createElement createTextNode(创建文本节点)
3.1.3 属性节点操作
getAttribute setAttribute removeAttribute
3.1.4 常用DOM属性
className innerHTML innerText/textContent value
children
3.2 DOM就是一个非常典型的面向对象,所有的节点都是对象
在DOM中所有的东西全部都是对象,所以,使用DOM非常简单方便 jQuery中所有的东西也都是对象
4. 面向对象
- 案例:写一个对象描述一个人要求有姓名、年龄、性别、sayHello
4.1 对象字面量(直接量)
4.1.1 对象是键值对的集合
- 属性访问语法:点运算符 和 []
// json 的表示法, 对象的直接量(字面量)
var p = {
name: "jim",
age: 19,
sex: "男",
sayHello: function() {
alert("你好,哈哈哈哈");
}
}; p.sayHello();
// 此时可以把对象称为:关联数组
p["sayHello"]();
- 字面量的缺点:无法复用
例如:
描述一个商品 Goods(name, price, img, count, pDate) 假如有 100 件
4.2 构造函数
- 优势:可复用
4.2.1 构造函数使用注意点(重点)
- 1 函数名以大写字母开头(推荐)
- 2 不需要返回值
- 3 为对象添加成员使用 this.成员名 = 值
- 4 创建对象使用 new 关键字
var Person = function() {
this.name = "jim";
this.age = 19;
this.gender = "男"; this.sayHello = function() {
alert("你好,哈哈哈哈");
};
};
// 创建对象(构造函数Person的对象)
var p = new Person();
// 访问对象的 属性
console.log(p.name);
// 访问对象的 方法
p.sayHello();
- 案例:修改 Person 为带参数的形式
- 练习:
写一个学生 Student, 要求有 姓名性别年龄和课程分数(语文, 数学, 英语)和说话的方法
4.3 函数参数问题
- 案例:求三角形面积( s = d * h / 2)
// 不使用函数
var area = 10 * 10 / 2; // 封装成函数
function getArea() {
var area = 10 * 10 / 2;
return area;
} // 改进
function getArea(bottom, height) {
return bottom * height / 2;
}
getArea(10, 20);
4.3.1 函数参数注意点
- 1 把函数参数看作是变量,只能在函数内部使用
- 2 函数调用时参数传入顺序不能颠倒
- 3 参数的值是在函数被调用的时候通过传入的参数设置的值
4 函数调用时不传入参数,则函数内部获取参数的值为:undefined
练习:写一个函数打印一段文字,要求:传入什么内容,就打印什么内容
4.3.2 形参和实参
形参(形式参数),即函数定义时的参数,只起到占位的作用,等到函数被调用的时候,会被传入的具体值代替。【联想数学公式】 s = d * h / 2; 实参(实际参数),即函数被调用时的参数,是一个具体的值或者表达式(1、"老司机"、true、[2, 2]、{ name: "two"} 等)
4.4 原型(prototype)
4.4.1 方法放在构造函数中的缺点
- 浪费内存
构造函数中的属性和方法,会在调用的时候被处理,即会消耗内存。 new 出来的对象,都是一个单独副本
new 一个对象就占用一份内存,new 多少对象就占用多少份内存。 但是对于构造函数中的方法来说,每个对象的方法都是相同的(或者说应该是被共享的)
对于典型的淘宝商品详情页,经测试发现,每增加一个 DOM 节点,会导致首屏渲染时间延迟约 0.5ms
4.4.2 原型的说明
- 一个对象的原型就是:构造函数的prototype属性的值
- 只要是函数就有 prototype 属性,即函数的原型属性
- 函数的原型属性(prototype)的类型是:"object"
- 由 构造函数 创建出来的对象,会默认链接到其构造函数的这个属性(prototype)的值上
- 构造函数的 prototype 属性的作用是:实现数据共享
function Person() {}
// prototype 即 原型
Person.prototype.legs = 2; var p = new Person();
console.log(p.legs);
4.4.3 属性查找规则
在访问对象的某一个属性 (方法)的时候: 1 首先会在当前对象中查找有没有该属性
2 如果当前对象没有, 就会在构造方法的定义规则中查找(当前对象)
3 如果没有, 就会到与对象联系起来的 构造函数的 prototype 属性的值中找
4.5 利用原型改良构造函数
// 对象会到 与它联系的 prototype 中找数据
// 可以考虑将共享的数据, 放到 里面
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
alert(this.name);
}; var p = new Person();
p.sayHello();
- 原则:只将公共的属性和方法放到 prototype 中
4.5.1 属性修改和读取的区别
获取操作:
遵循属性查找原则 赋值操作(只与当前对象有关):
只会操作对象本身,如果对象中没有该属性则创建该属性,并赋值;如果对象中有,则修改
4.6 prototype 和 __proto__
__proto__
是非标准属性
对象中有一个属性 叫 __proto__
对象的 __proto__ 与创建它的构造函数的 prototype 是一个东西
function F() {}
var o = new F(); console.log(o.__proto__ === F.prototype);
- 术语
F.prototype 原型属性
f.__proto__ 原型对象 F.prototype 是 构造函数F的 原型属性
f.__proto__ 是 对象f的 原型对象
javascript的基础知识及面向对象和原型属性的更多相关文章
- 快速掌握JavaScript面试基础知识(三)
译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...
- 快速掌握JavaScript面试基础知识(二)
译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...
- C#基础知识之面向对象以及面向对象的三大特性
在C#基础知识之类和结构体中我详细记录了类.类成员.重载.重写.继承等知识总结.这里就记录一下对面向对象和面向对象三大特性的广义理解. 一.理解面向对象 类是面向对象编程的基本单元,面向对象思想其实就 ...
- JavaScript 之基础知识
JavaScript 基础知识 JavaScript 是属于网络的脚本语言! JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. JavaS ...
- JAVA基础知识之面向对象编程知识汇总
JAVA基础课程部分面向对象已经学习完成,知识结构如下: 总体知识框架: 类的结构: 面向对象编程三大特征: 关键字和抽象类接口等: 常见知识汇总: 成员变量和局部变量比较 有无返回值方法比较: 权限 ...
- Js基础知识(二) - 原型链与继承精彩的讲解
作用域.原型链.继承与闭包详解 注意:本章讲的是在es6之前的原型链与继承.es6引入了类的概念,只是在写法上有所不同,原理是一样的. 几个面试常问的几个问题,你是否知道 instanceof的原理 ...
- JavaScript对象基础知识总结
1.什么叫JavaScript对象? 定义:名值对的集合.简单的讲就是容纳属性值和属性值的容器,这些属性可以是无序的,基本上JavaScript中所有的事物都可以看成对象. 拓展:我们经常说,数组也是 ...
- [C#基础]基础知识一: 面向对象的基本知识.
激励自己有时间多看看.!! C#基础共分为七个部分: 一: 面向对象 二: 值类型, 引用类型, 字符串操作 三: 集合文件操作 四: 正则表达式 五: XML操作 六: 委托, 事件 七: 反射 1 ...
- JavaScript语言基础知识8
这篇文章是对前面学习的知识进行总结: 1.JavaScript支持多种数据类型,如数值类型.字符串类型.布尔类型等. 2.在JavaScript中,字符串是用引號括起来的字符系列,转义字符能够用来表示 ...
随机推荐
- Nginx服务的地址重写
调整Nginx服务器配置,实现: 1.所有访问a.html的请求,重定向到b.html; 2.所有访问Nginx服务器(192.168.4.1)的请求重定向至www.baidu.com: 3.所有访问 ...
- 从输入url到页面展示出来经历了哪些过程
本文只是一个整理向的随笔,以个人思路来简化的同时进行适当的拓展,如有错误,欢迎指正. 1.输入网址. 此时得到一个url 2.域名解析 整个过程都是dns系统在发挥作用,它的目的是将域名和ip对应起 ...
- git_安装与配置
安装 windows平台安装 在windows平台安装git,需要下载exe.文件,下载地址:https://gitforwindows.org/,双击下载的.exe文件,按照提示进行安装,安装完成后 ...
- tomcat实现连接数据库
192.168.30.23mkdir /web/webapptar xf SLSaleSystem.tar.gz -C /web/webappls /web/wenbappvim /usr/loca ...
- 微信小程序 PDF下载打印
在开发微信小程序时,需要打印生成的PDF,实现思路是:后端生成相应的PDF,微信小程序下载并打开. 但是微信小程序并不可以打印,所以需要借助其他APP比如:WPS,但是发现微信小程序down的PDF在 ...
- Day 20 python基础总复习
一.计算机基础 1.1 计算机基础之编程 编程语言是人与计算机之间交流的介质 编程就是写一堆文件 编程为了奴隶计算机,解放劳动力 1.2 计算机组成原理 CPU 控制器:控制硬件 运算器:逻辑运算和算 ...
- 【剑指Offer】41、和为S的连续正数序列
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数). ...
- 02-Linux命令基础-第02天(压缩包管理、服务器搭建与使用、vim)
01- 复习 /boot 目录 引导项 八种文件类型: 文件:- 目录:d 软链接:l 字符设备文件:c 块设备文件:b 管道:p 套接字:s 未知 cp –a 保持源文件属性(如时间属性 如果不 ...
- 填坑...P1546 最短网络 Agri-Net
P1546 最短网络 Agri-Net 难度普及/提高- 时空限制1s / 128MB 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要 ...
- 洛谷11月月赛(284pts rank85)
https://www.luogu.org/contestnew/show/12006 我是比赛完后在去写的 这是我第一次打洛谷月赛,之前一次是比赛完才去看而且写了第一题就没写后面的了 284分,太水 ...