Javascript-基本知识(五)

Javascript基本知识(五)

1.面向对象的方式管理图书

<script>

var obj = [
    {name:"什么是批判",author:"福柯"},
    {name:"飞鸟集",author:"泰戈尔"}
];

function BookManager() {
    this.bookList = null;
}

BookManager.prototype = {
    constructor:BookManager,
    init:function (arr) {
        this.bookList = arr || [];
    },

    addBook:function (bookObj) {
        this.bookList.push(bookObj)
    },
    getBook:function (name) {
    for (var i = 0; i < this.bookList.length; i++) {
        var obj = this.bookList[i];
        if (obj.name == name)
        {
            return obj;
        }
    }
    return null;
},
    updateBookData:function (name,authorName){
        var obj = this.getBook(name);
        obj.author = authorName;
    },
    removeBook:function (name) {
        var obj = this.getBook(name);
        var index = this.bookList.indexOf(obj);
        this.bookList.splice(index,1);
    }
};

//01 创建对象
var YYManager = new BookManager();
YYManager.init(obj);
console.log(YYManager.bookList);

//02 演示添加操作
YYManager.addBook({name:"花田半亩",author:"田维"});
console.log(YYManager.bookList);

//03 演示查询操作
console.log(YYManager.getBook("花田半亩"));

//04 演示更新操作
YYManager.updateBookData("花田半亩","甜田");
console.log(YYManager.getBook("花田半亩"));;

//05 演示删除操作
YYManager.removeBook("什么是批判");
console.log(YYManager.bookList);

总结:

 1. 提供构造函数,在构造函数内部设置实例化属性
 2. 把常用的操作提取成对象的是实例方法,写在原型对象上面
 3. 提供init方法,用于初始化数据
 4. 如果切换了原型对象,需要修正构造器指向

2.严格模式

JS有两种开发模式:严格模式和非严格模式(默认)

严格模式下,以前在默认情况下可能不会出错或者是静默失败或者可以使用的特性,在严格模式下会直接报错。

  1. 开启严格模式:
    在当前作用域的最顶端添加一个字符串:"use strict"

  2. 部分浏览器不支持严格模式,如果支持,当检测到"use strict"时会自动开启严格模式。

  3. 严格模式的使用注意:

    1. 所有的变量都必须使用var声明
    2. 禁止使用with
    3. 禁止使用八进制
    4. 禁止使用callee|caller
    5. 禁止使用eval和arguments作为标识符
    6. 在if语句中不能声明函数
    7. 在函数的声明中不能出现同名的参数
    8. 在对象中不能出现同名的属性
    9. 在严格模式下arguments的表现略微不同(默认情况下,函数内部重新设置形参的值时,arguments也会跟着改变,他们是共享的;严格模式下,他们相互独立)
    10. 不能删除全局变量
    11. this指向被修正(默认情况下,this->window;严格模式下,this->undefined
  4. 严格模式书写注意点:

    书写格式:

          ①双引号和单引号都可以
          ②分号可以被省略
          ③必须全部都是小写字符
          ④必须是10个字符
    

也就是说:"use strict"或"use strict "这种都是错误的。

  1. "use strict"作用域:全局作用域script和函数作用域。

注意:"use strict";必须放在当前作用域前面,如果放在后面,就不起作用

3.作用域:变量起作用的范围。

  1. 块级作用域:在{}括号内,只在{}内部有效,变量在声明他们的代码段之外是不可见的。

js中没有块级作用域(注意:try...catch例外),而是函数作用域。

为什么说js没有块级作用域呢?
eg:<script>
var name = "global";
if(true){
    name = "local";
    console.log(name);  //local
}
console.log(name);  //loacal
</script>
如果有块级作用域,if语句将创建局部变量name,并不会修改全局name。但是从输出结果看,js中name就是全局变量,所以JS没有块级作用域。
  1. 函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是由定义的。
  1. 词法作用域:当代码写好后,它的作用域就已经确定了。

  2. 动态作用域:作用域范围在程序运行时才确定。

js本身是词法作用域(例外:with+eval+try...catch

词法作用域访问规则:
首先在自己的作用域中查找,如果找到,就直接使用;如果没有找到,就在上一级的作用域中查找。

4.变量和函数的提升

(1)js预解析处理:变量和函数的提升(把变量和函数的声明提升在作用域顶端)
(2)具体执行。

1 变量和函数的提升是分作用域的。

注意:01 变量和变量同名时,后面的变量会把前面的同名变量覆盖

02 函数和函数同名时,后面的函数会把前面的同名函数覆盖

03 变量和函数同名时,跟前后位置无关。

2 函数表达式的提升

在提升的时候仅仅只会把var 变量名 提升,不会把整个函数提升。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容