历史背景介绍

(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript。

JavaScript的组成

  • ECMAScript :定义了js的语法标准: 包含变量 、表达式、运算符、函数、if语句 for循环 while循环、内置的函数,对象 (封装 继承 多态) 基于对象的语言.使用对象

  • 文档对象模型(DOM) Document object model :操作网页上元素的API。比如让盒子显示隐藏、变色、动画 form表单验证

  • 浏览器对象模型(BOM) Broswer object model:操作浏览器部分功能的API。比如刷新页面、前进后退、让浏览器自动滚动

JavaScript基础

js的引入方式

  1. <!--内接式-->
  2. <script type="text/javascript">
  3.  
  4. </script>
  5.  
  6. <!--外接式-->
  7. <script type="text/javascript" src="../index.js">
  8. <!--相当于引入了某个模块-->
  9. </script>

  

注释

  1. 单行注释的快捷键ctrl+/.多行注释的快捷键是ctrl+shift+/

  

调试语句

  1. alert(''); 弹出警告框
  2. console.log(''); 控制台输出

  

变量的声明

在js中使用var关键字 进行变量的声明,注意 分号作为一句代码的结束符

  1. var i=100

  

  • 定义变量:var就是一个关键字,用来定义变量。所谓关键字,就是有特殊功能的小词语。关键字后面一定要有空格隔开。

  • 变量的赋值:等号表示赋值,将等号右边的值,赋给左边的变量。

  • 一行可以声明多个变量.并且可以是不同类型
  • 变量命名,首字符只能是字母,下划线,$美元符 三选一,余下的字符可以是下划线、美元符号或任何字母或数字字符且区分大小写,x与X是两个变量
  1. var colors = ['red','green','yellow'],name_k='w',age=20;
  2. var $x='w'

  

  • 变量要先定义,才能使用。比如,我们不设置变量,直接输出:
  1. <script type="text/javascript">
  2. console.log(a);
  3. </script>

  控制台将会报错:

  • 变量不能使用JS保留字

JS保留字

JS基本数据类型

数值类型:number

如果一个变量中,存放了数字,那么这个变量就是数值型的,不区分整型数值和浮点型数值;

  1. <script type="text/javascript">
  2. var a = 100; //定义了一个变量a,并且赋值100
  3. console.log(typeof a); //输出a变量的类型 使用typeof函数 检测变量a的数据类型number
  4. //特殊情况
  5. var b = 5 / 0;
  6. console.log(b); //Infinity 无限大
  7. console.log(typeof b); //number 类型
  8. var num = .1;
  9. console.log(num); //0.1
  10. console.log(typeof num); //number 类型
  11. var num = 1.3 ;
  12. console.log(num) ;//1.3
  13. console.log(typeof num); //number 类型
  14. var num = 10.;
  15. console.log(num) ;//10.0
  16. console.log(typeof num); //number 类型
  17.  
  18. </script>
字符串类型(string):

是由Unicode字符、数字、标点符号组成的序列;字符串常量首尾由单引号或双引号括起;JavaScript中没有字符类型;常用特殊字符在字符串中的表达;
字符串中部分特殊字符必须加上右划线\;常用的转义字符 \n:换行 \':单引号 \":双引号 \\:右划线

  1. <script type="text/javascript">
  2. var a = "abcde";
  3. var b = "路飞";
  4. var c = "123123";
  5. var d = "哈哈哈哈哈";
  6. var e = ""; //空字符串
  7. var f = '\n\\';//回车+\
  8. console.log(f);
  9. </script>

连字符和+号的区别

键盘上的+可能是连字符,也可能是数字的加号。如下:

  1. console.log("我" + "爱" + "你"); //连字符,把三个独立的汉字,连接在一起了
  2. console.log("我+爱+你"); //原样输出
  3. console.log(1+2+3); //输出6

总结:如果加号两边都是数值,此时是加。否则,就是连字符(用来连接字符串)

布尔类型:boolean

boolean类型仅有两个值:true和false,也代表1和0,实际运算中true=1,false=0

  1. <script type="text/javascript">
  2. var isShow = false;
  3. console.log(typeof isShow);//boolean
  4. console.log(isShow);//false
  5. </script>

 

空对象:null
  1. <script type="text/javascript">
  2. var c1 = null; //空对象. object
  3. console.log(typeof c1);
  4. </script>

  

未定义:undefined
  1. <script type="text/javascript">
  2. var d1;
  3. //表示变量未定义
  4. console.log(d1);//undefined
  5. </script> 
NaN:

NaN 即 Not a Number ,不是一个数字。 在 JavaScript 中,整数和浮点数都统称为 Number 类型 。除此之外,Number 类型还有一个很特殊的值,即 NaN 。它是 Number 对象上的一个静态属性

  1. 100 - '2a' ; // NaN
  2. '100' / '20a'; // NaN
  3. 'abc' - 3 // NaN
  4. parseInt('abc') // NaN
  5. parseFloat('abc') // NaN
  6. Number('abc') // NaN

数字+字符

  1. 5 + 4 + '6' = '96';
  2. 1 + '2' + 3 = '123'

  

运算符

赋值运算符

以var x = 12,y=5来演示示例

逻辑运算符:

&&    ||  !

算术运算符:

+ - * / % ++ --

  1. ++i:先计算后赋值
  2. i++:先赋值后计算
  1. <script type="text/javascript">
  2. var x=1,y=5;
  3.  
  4. x=y++;
  5. console.log(x,y);//5,6
  6. x=++y;
  7. console.log(x,y);//7,7
  8. x=y--;
  9. console.log(x,y);//7,6
  10. x=--y;
  11. console.log(x,y);//5,5
  12. </script>

  

数据类型转换

将number类型转换成string类型

隐式转换

  1. <script type="text/javascript">
  2. var n1 = 1234;
  3. var n2 = '1234';
  4. var n3 = n1 + n2;
  5. // 隐式转换
  6. console.log(typeof n3);
  7. console.log(n3);//'12341234'
  8. </script>

强制转换

  1. <script type="text/javascript">
  2. // 强制类型转换String(),toString()
  3. var n1 = 1234;
  4. var n2 = String(n1);
  5. console.log(typeof n2);//string
  6. var n3 = n1.toString();
  7. console.log(typeof n3);//string
  8. console.log(n3);//'1234'
  9. </script>

  

将string类型转换成number类型

  1. <script type="text/javascript">
  2. var stringNum = '789.123wadjhkd';
  3. var num2 = Number(stringNum);
  4. console.log(num2);//NaN Not a Number 但是一个number类型
  5. //属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
  6. // parseInt()可以解析一个字符串 并且返回一个整数
  7. console.log(parseInt(stringNum)); //789
  8. console.log(parseFloat(stringNum));//789.123
  9. </script>

  

任何的数据类型都可以转换为boolean类型

  1. <script type="text/javascript">
  2. var b1 = '123'; //true
  3. var b2 = 0; //false
  4. var b3 = -123 //true
  5. var b4 = Infinity; //true
  6. var b5 = NaN; //false
  7. var b6; //false
  8. var b7 = null; //false
  9. //使用Boolean(变量) 来查看当前变量的真假
  10. console.log( Boolean(b1));
  11. console.log( Boolean(b2));
  12. console.log(Boolean(b3));
  13. console.log( Boolean(b4));
  14. console.log( Boolean(b5));
  15. console.log( Boolean(b6));
  16. console.log(Boolean(b7));
  17.  
  18. </script>
  19. </body>

  

流程控制

if

  1. <script type="text/javascript">
  2. var age = 20;
  3. if(age > 18) {
  4. //{}相当于作用域
  5. console.log('可以喝酒');
  6. }
  7. alert('alex'); //下面的代码照样执行
  8. </script>

  

if-else

  1. <script type="text/javascript">
  2. var age = 20;
  3. if(age > 18) {
  4. //{}相当于作用域
  5. console.log('可以去喝酒');
  6. } else {
  7. console.log('可以去喝水');
  8. }
  9. alert('alex'); //下面的代码照样执行
  10. </script>

  

if-else if -else

  1. <script type="text/javascript">
  2. var age = 18;
  3. if(age == 18) {
  4. //{}相当于作用域
  5. console.log('已经成人');
  6. } else if(age == 30) {
  7. console.log('该娶媳妇了!!');
  8. } else {
  9. console.log('随便你了')
  10. }
  11. alert('alex'); //下面的代码照样执行
  12. </script>

  

逻辑与&&、 逻辑或||

  1. //1.模拟 如果总分 >400 并且数学成绩 >89分 被清华大学录入
  2. //逻辑与&& 两个条件都成立的时候 才成立
  3. var sum = 420,
  4. math = 99;
  5. if(sum > 400 && math > 90) {
  6. console.log('清华大学录入成功')
  7. } else {
  8. alert('高考失利')
  9. }
  10.  
  11. //2.模拟 如果总分>400 或者你英语大于85 被复旦大学录入
  12. //逻辑或 只有有一个条件成立的时候 才成立
  13. var sum = 550,
  14. english = 80;
  15. if(sum > 500 || english > 85) {
  16. alert('被复旦大学录入')
  17. } else {
  18. alert('高考又失利了')
  19. }

  

switch 语句

  1. <script type="text/javascript">
  2. var gameScore = 'good';
  3.  
  4. switch(gameScore) {
  5.  
  6. //case表示一个条件 满足这个条件就会走进来 遇到break跳出。break终止循环。如果某个条件中不写 break,那么直到该程序遇到下一个break停止
  7. case 'good':
  8. console.log('玩的很好')
  9. //switch语句 case表示一个条件,满足这个条件就会输出,直到遇到break跳出,如果你的break不写,那么程序会遇到下一个break停止。这个就是‘case穿透’
  10. //break; //不加break,程序执行到case better,会输出‘玩的老牛逼了’
  11. case 'better':
  12. console.log('玩的老牛逼了')
  13. break;
  14. case 'best':
  15. console.log('恭喜你 吃鸡成功')
  16. break;
  17.  
  18. default:
  19. console.log('很遗憾')
  20.  
  21. }
  22. //注意:switch相当于if语句 但是玩switch的小心case穿透
  23. </script>

  

while循环

  1. <script type="text/javascript">
  2. // 例子:打印 1~9之间的数
  3. var i = 1; //初始化循环变量
  4.  
  5. while(i <= 9) { //判断循环条件
  6. console.log(i);
  7. i = i + 1; //更新循环条件
  8. }
  9. </script>

  

for循环

for循环遍历列表是最常用的对数据的操作,在js中希望大家熟练使用for循环的书写方式

  1. <script type="text/javascript">
  2. // 例子:输入1~100之间所有数之和
  3. var i, sum; //初始化变量
  4.  
  5. for(i = 1, sum = 0; i <= 100; i++) { //for
  6. sum += i;
  7.  
  8. }
  9. console.log(sum);
  10. </script>

  

for循环嵌套的练习

  1. <script type="text/javascript">
  2. // 例子:1.在浏览器中输出直角三角形
  3. //*
  4. //**
  5. //***
  6. //****
  7. //*****
  8. //******
  9. var i, j; //初始化变量
  10.  
  11. for(i = 1; i <= 6; i++) { //控制的行数
  12. for(j = 1; j <= i; j++) {
  13. document.write("*"); // 往浏览器文档中写*
  14. }
  15. document.write("<br>"); // 往浏览器文档中写<br>
  16. }
  17.  
  18. </script>

  

for循环嵌套的练习二

实现乘法口诀表

  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title></title>
  5. <style type="text/css">
  6. *{
  7. margin: 0;
  8. padding: 0;
  9. }
  10. div{
  11. margin: 10px;
  12. }
  13. span{
  14. margin: 5px;
  15. display: inline-block;
  16. border: red 2px solid;
  17. width: 60px;
  18. height: 30px;
  19. line-height: 30px;
  20. text-align: center;
  21. font-size: 14px;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div id='box'></div>
  27. <script type="text/javascript">
  28. var oBox = document.getElementById('box');
  29. for (var i=1;i<10;i++){
  30. for(j=1; j<=i;j++){
  31. oBox.innerHTML += "<span>"+i+"*"+j+"="+i*j+"</span>"
  32. }
  33. oBox.innerHTML +="<br>"
  34. }
  35.  
  36. </script>
  37. </body>
  38. </html>

  

  

数组Array

  1. //创建方式一
  2. var colors = ['red','green','yellow'];
  3. //创建方式二
  4. var colors = new Array();
  5. //通过下标进行赋值
  6. colors[0] = 'red';
  7. colors[1] = 'green';
  8. colors[2] = 'yellow';
  9. console.log(colors);

  

  1. //数组的合并 concat()
  2. var north = ['北京', '山东', '天津'];
  3. var south = ['东莞', '深圳', '上海'];
  4.  
  5. var newCity = north.concat(south)
  6. console.log(newCity) //['北京', '山东', '天津','东莞', '深圳', '上海']
  7.  
  8. //join() 将数组中元素使用指定的字符串连接起来, 它会形成一个新的字符串
  9. var score = [98, 78, 76, 100, 101];
  10. var str = score.join("|")
  11. console.log(str); //"98|78|76|100|0"
  12.  
  13. //slice(start, end); 切片,返回数组的一段记录, 顾头不顾尾
  14. var arr = ['张三', '李四', '王文', '赵六'];
  15. var newArr = arr.slice(1,3);
  16. console.log(newArr); //["李四", "王文"]
  17.  
  18. //pop 移除数组的最后一个元素
  19. var arr = ['张三', '李四', '王文', '赵六'];
  20. arr.pop();
  21. console.log(arr); //["张三", "李四","王文"]
  22.  
  23. //push() 向数组最后添加一个元素
  24. var arr = ['张三', '李四', '王文', '赵六'];
  25. arr.push('小马哥');
  26. console.log(arr); //["张三", "李四","王文","赵六","小马哥"]
  27.  
  28. //shift() 移除数组第一个元素
  29. var arr = ['张三', '李四', '王文', '赵六'];
  30. arr.shift();
  31. console.log(arr); //["李四","王文","赵六"]
  32.  
  33. //unshift() 向数组开头添加一个元素
  34. var arr = ['张三', '李四', '王文', '赵六'];
  35. arr.unshift('小马哥');
  36. console.log(arr); //["小马哥","张三", "李四","王文","赵六"]
  37.  
  38. //reverse() 翻转数组
  39. var names = ['alex', 'xiaoma', 'tanhuang', 'angle'];
  40. //反转数组
  41. names.reverse();
  42. console.log(names);
  43.  
  44. //sort对数组排序
  45. var names = ['alex', 'xiaoma', 'tanhuang', 'abngel'];
  46. names.sort();
  47. console.log(names); // ["alex", "angle", "tanhuang", "xiaoma"]
  48. //判断是否为数组: isArray()
  49. //布尔类型值 = Array.isArray(被检测的值);

  

字符串string

  1. <script type="text/javascript">
  2. //chartAt() 返回指定索引的位置的字符
  3. var str = 'alex';
  4. var charset = str.charAt(3);
  5. console.log(charset); //x
  6.  
  7. //concat 返回字符串值, 表示两个或多个字符串的拼接
  8. var str1 = 'al';
  9. var str2 = 'ex';
  10. console.log(str1.concat(str2, str2)); //alexex
  11.  
  12. //replace(a, b) 将字符串a替换成字符串b
  13. var a = '1234567755';
  14. var newStr = a.replace("456", "****");
  15. console.log(newStr); //123****7755
  16.  
  17. //indexof() 查找字符的下标, 如果找到返回字符串的下标, 找不到则返回 - 1。 跟seach() 方法用法一样
  18. var str = 'alex';
  19. console.log(str.indexOf('e')); //2
  20. console.log(str.indexOf('p')); //-1
  21.  
  22. //slice(start, end) 左闭右开 分割字符串
  23. var str = '小马哥';
  24. console.log(str.slice(1, 2)); //马
  25.  
  26. //split('a', 1) 以字符串a分割字符串, 并返回新的数组。 如果第二个参数没写, 表示返回整个数组, 如果定义了个数, 则返回数组的最大长度
  27. var str = '我的天呢,a是嘛,你在说什么呢?a哈哈哈';
  28. console.log(str.split('a')); //["我的天呢,", "是嘛,你在说什么呢?", "哈哈哈"]
  29.  
  30. //substr(statr, end) 左闭右开
  31. var str = '我的天呢,a是嘛,你在说什么呢?a哈哈哈';
  32. console.log(str.substr(0, 4)); //我的天呢
  33. //toLowerCase() 转小写
  34. var str = 'XIAOMAGE';
  35. console.log(str.toLowerCase()); //xiaomage
  36. //toUpperCase() 转大写
  37. var str = 'xiaomage';
  38. console.log(str.toUpperCase()); //XIAOMAGE
  39. //特别:
  40.  
  41. //1.将number类型转换成字符串类型
  42. var num = 132.32522;
  43. var numStr = num.toString()
  44. console.log(typeof numStr)
  45. //四舍五入
  46. var newNum = num.toFixed(2)
  47. console.log(newNum)
  48. </script>

  

字符串练习题:

对“hello world”进行翻转处理 要求变为:"dlorw olleh"

  1. <script type="text/javascript">
  2. var s = 'hello world';
  3. var arr = s.split('');
  4. console.log(arr.reverse().join("")) //dlrow olleh
  5. </script>

  

Math内置对象

  1. <script type="text/javascript">
  2. //Math.ceil() 向上取整,'天花板函数'
  3. var x = 1.234;
  4. //天花板函数 表示大于等于 x,并且与它最接近的整数是2
  5. var a = Math.ceil(x);
  6. console.log(a); //2
  7. //Math.floor 向下取整,'地板函数'
  8. var x = 1.234;
  9. // 小于等于 x,并且与它最接近的整数 1
  10. var b = Math.floor(x);
  11. console.log(b); //1
  12. //求两个数的最大值和最小值
  13. //求 两个数的最大值 最小值
  14. console.log(Math.max(2, 5)); //5
  15. console.log(Math.min(2, 5)); //2
  16. //随机数 Math.random()
  17. var ran = Math.random();
  18. console.log(ran);//[0, 1)
  19. //如果让你取100-200之间的随机数,怎么做?
  20. //背过公式:min - max之间的随机数: min+Math.random()*(max-min);
  21. var ran = 100 + Math.random()*(200-100);
  22. console.log(ran);//[100 ,200)
  23. </script>

  

Date日期对象

创建日期对象只有构造函数一种方式,使用new关键字

  1. //创建了一个date对象
  2. var myDate = new Date();

  1. <script type="text/javascript">
  2. //创建了一个date对象
  3. var myDate = new Date();
  4. //返回本地时间
  5. console.log(new Date().toLocaleString());//2018/11/26 下午10:33:41
  6.  
  7. console.log(myDate.getFullYear().toString()+(myDate.getMonth()+1).toString()+myDate.getDate().toString());//20181126
  8. </script>

  

JSON

概念简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。

在JSON中,有两种结构:对象和数组。

  1. //对象
  2. var packJSON = {
  3. "name": "alex",
  4. "password": "123"
  5. };
  6. //一个对象以“{”开始,“}”结束,“key/value”之间运用 “,”分隔。
  7.  
  8. //数组
  9. var packJSON = [{
  10. "name": "alex",
  11. "password": "123"
  12. }, {
  13. "name": "wusir",
  14. "password": "456"
  15. }];
  16. //数组是值的有序集合。一个数组以“[”开始,“]”结束。值之间运用 “,”分隔。

  

JSON对象和JSON字符串转换

在数据传输过程中,JSON是以字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

  1. <script type="text/javascript" src="js/jquery-3.2.1.js" ></script>
  2. <script type="text/javascript">
  3. //JSON字符串:
  4. var jsonStr = '{"name":"alex", "password":"123"}';
  5. //JSON对象:
  6. var jsonObj = {
  7. "name": "alex",
  8. "password": "123"
  9. };
  10. //JSON字符串转换JSON对象
  11. var jsonObject = jQuery.parseJSON(jsonStr);
  12. console.log(jsonObject);
  13. //JSON对象转化JSON字符串
  14. var jsonstr = JSON.stringify(jsonObject);
  15. console.log(jsonstr);

  

遍历JSON对象和JSON数组
  1. //遍历JSON对象代码如下:
  2. var packAlex = {
  3. "name": "alex",
  4. "password": "123"
  5. };
  6.  
  7. for(var k in packAlex) { //遍历packAlex 对象的每个key/value对,k为key
  8. alert(k + " " + packAlex[k]);
  9. }
  10. //遍历JSON数组代码如下
  11. var packAlex = [{
  12. "name": "alex",
  13. "password": "123"
  14. }, {
  15. "name": "wusir",
  16. "password": "456"
  17. }];
  18.  
  19. for(var i in packAlex) { //遍历packJson 数组时,i为索引
  20. alert(packAlex[i].name + " " + packAlex[i].password);
  21. }

  

函数

函数:就是把将一些语句进行封装,然后通过调用的形式,执行这些语句。

函数的作用:

  • 解决大量的重复性的语句
  • 简化编程,让编程模块化
  1. # python 中声明函数
  2. def add(x,y):
  3. return x+y
  4.  
  5. # 调用函数
  6. print(add(1,2))
  7. //js中声明函数
  8. function add(x,y){
  9. return x+y;
  10. }
  11. //js中调用函数
  12. console.log(add(1,2));

解释如下:

  • function:是一个关键字。中文是“函数”、“功能”。
  • 函数名字:命名规定和变量的命名规定一样。只能是字母、数字、下划线、美元符号,不能以数字开头。
  • 参数:后面有一对小括号,里面是放参数用的。
  • 大括号里面,是这个函数的语句

 

对象Object

1.使用Object或对象字面量创建对象

2.工厂模式创建对象

3.构造函数模式创建对象

4.原型模式创建对象

使用Object或字面量方式创建对象
  1. // 1.原始模式,对象字面量方式
  2. var person = {
  3. name: 'alex',
  4. age: 18,
  5. sayName: function() {
  6. alert(this.name);
  7. }
  8. };
  9. console.log(person);
  10. //1.原始模式,Object构造函数方式
  11. var person1 = new Object();
  12. person1.name = '小马哥';
  13. person1.age = 28;
  14. person1.sayName = function() {
  15. alert(this.name);
  16. };
  17. console.log(person1);

 当我们要创建批量的person1、person2……时,每次都要敲很多代码

工厂模式

工厂模式就是批量化生产,简单调用就可以进入造人模式, 指定姓名年龄就可以造一堆小宝宝啦,解放双手。但是由于是工厂暗箱操作的,所以你不能识别这个对象到底是什么类型、是人还是狗傻傻分不清(instanceof 测试为 Object).

  1. //2.工厂模式创建对象
  2. function createPerson(name, age) {
  3. var person = new Object();
  4. person.name = name;
  5. person.age = age;
  6. person.sayName = function() {
  7. alert(this.name);
  8. };
  9. return person;
  10. }
  11.  
  12. var person1 = createPerson("easy1", 18);
  13. var person2 = createPerson("easy2", 20);
  14.  
  15. console.log(person1);
  16. console.log(person2);

  

构造函数模式创建对象
  1. //3.构造函数模式,为对象定义一个构造函数
  2. function Person(name, age) {
  3. this.name = name;
  4. this.age = age;
  5. this.sayName = function() {
  6. alert(this.name);
  7. };
  8. }
  9.  
  10. function Fruit(name, color) {
  11. this.name = name;
  12. this.color = color;
  13. this.alertName = function() {
  14. alert(this.name)
  15. };
  16. }
  17. var p1 = new Person('Jack', 18); //创建一个p1对象
  18. var f1 = new Fruit('apple', 'red')
  19.  
  20. //区分不同类型的对象
  21. alert(p1 instanceof Person); //true
  22. alert(p1 instanceof Fruit); //false
  23. alert(f1 instanceof Person); //false
  24. alert(f1 instanceof Fruit); //true
  25.  
  26. console.log(p1);
  27. console.log(f1);

使用new操作符调用构造函数时,会经历

(1)创建一个新对象;

(2)将构造函数作用域赋给新对象(使this指向该新对象);

(3)执行构造函数代码;

(4)返回新对象;4个阶段。  

工厂模式解决了无法区分对象类型的尴尬,我们会发现Student和Fruit对象中共有同样的方法,当我们进行调用的时候这无疑是内存的消耗.

原型的模式创建对象
  1. //4.原型模式,直接定义prototype属性
  2. function Person() {}
  3. Person.prototype.name = 'Jack';
  4. Person.prototype.age = 18;
  5. Person.prototype.sayName = function() {
  6. alert(this.name);
  7. };
  8. //4.原型模式,字面量定义方式
  9. function Fruit() {}
  10. Person.prototype = {
  11. name: 'apple',
  12. color: 'red',
  13. sayName: function() {
  14. alert(this.name);
  15. }
  16. };
  17. var p1 = new Person(); //name='Jack'
  18. var p2 = new Person(); //name='Jack'
  19.  
  20. alert(p1.sayName == p2.sayName); //true 二者共享同一函数

  需要注意的是原型属性和方法的共享,即所有实例中都只是引用原型中的属性方法,任何一个地方产生的改动会引起其他实例的变化。

JavaScript(JS)简介的更多相关文章

  1. prototype.js简介

    prototype.js简介 2007-11-21 14:22 prototype.js是一个很强大的Javascript函数库,它可以让你很轻松的使用一些特效,实现AJAX的功能.虽然prototy ...

  2. HTML基础--JS简介、基本语法、类型转换、变量、运算符、分支语句、循环语句、数组、函数、函数调用.avi

    JS简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司(已被Oracle收 ...

  3. 01 Node.js简介, 安装&配置

    Node.js 简介 Node.js 是什么 Node.js 有着强大而灵活的包管理器(node package manager,npm) 目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开 ...

  4. Gulp.js简介

    Gulp.js简介 我们讨论了很多关于怎么减少页面体积,提高重网站性能的方法.有些是操作是一劳永逸的,如开启服务器的gzip压缩,使用适当的图片格式,或删除一些不必要的字符.但有一些任务是每次工作都必 ...

  5. JavaScript(js)/上

    JavaScript(js) ECMA-----定义的基础语法 DOM------document  object  model BOM------Browser  object  model Jav ...

  6. 《React Native 精解与实战》书籍连载「Node.js 简介与 React Native 开发环境配置」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  7. JS 简介

    JS 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. avaScript 是脚本语言 J ...

  8. Zepto.js简介

    Zepto.js简介 一.总结 一句话总结: Zepto.js语法和jquery起码百分之90相似,主要做移动端框架,和jquery mobile是一个类型的概念 1.Zepto.js做移动端的特点? ...

  9. javascript(js)小数精度丢失的解决方案

    原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3* ...

  10. 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数

    来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...

随机推荐

  1. 832. Flipping an Image

    class Solution { public: vector<vector<int>> flipAndInvertImage(vector<vector<int& ...

  2. openstack的Host Aggregates和Availability Zones

    1.关系 Availability Zones 通常是对 computes 节点上的资源在小的区域内进行逻辑上的分组和隔离.例如在同一个数据中心,我们可以将 Availability Zones 规划 ...

  3. python模块:re

    # # Secret Labs' Regular Expression Engine # # re-compatible interface for the sre matching engine # ...

  4. ZOJ 3156 Taxi (二分 + 二分匹配)

    题意:给定 n 个人坐标, m 辆车的坐标,还有人的速度,要求每个人要进一辆不同的车,问你所有都进车的最短时间是多少. 析:首先二分时间 mid,很明显就是最后那个人进车的时间,然后如果把第 i 个人 ...

  5. castapp.js颜色配置

    1  修改head的背颜色 (1) header添加class  publicHead <header class="mui-bar mui-bar-nav publicHead&qu ...

  6. day19(乱码解决方案)

    乱码的解决方案: 首先需要理解乱码的产生原因:无非就是编码格式的问题 1.服务器到浏览器 字节流传输时 产生乱码的原因: 1.浏览器打开方式不对(打开时 的方式为默认的方式,各个浏览器的方式都不同) ...

  7. flask + apidoc 生成接口文档(附加一个坑)

    具体使用方法见这里 https://blog.csdn.net/lynnyq/article/details/79254290 挺详细的,我就不抄了. 重点是一个坑: 执行 python manage ...

  8. Lombok自定义annotation扩展含Intellij插件

    Lombok简介 Lombok(https://projectlombok.org/)  提供了以注解的形式为java对象增加属性和方法,这使得原来冗长的java源文件变的简洁(不需要再使用ide去生 ...

  9. hdu 3015

    这个题给你一堆树,每棵树的位置x和高度h都给你 f[i]代表这棵树的位置排名,s[i]代表这棵树的高度排名 问你任意两棵树的(f[i] - f[j])*min(s[i],s[j])和 (f[i]-f[ ...

  10. 【Android开发那点破事】打开APP加载页面实现

    今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...