为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
493人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • Object.defineProperty(o,'x',{value: 1, writable: true, configurable: true, enumerable: true});//默认的属性值都为false,value和其他的为undefined 一个属性的所有状态,包括它的数据和元数据,都存储在该属性的特性(attributes)中.属性拥有自己的特性,就像对象拥有自己的属性一样.特性的名称经常写成类似内部属性的形式(双中括号). 下面是命名数据属性拥有的特性: [[Value]] 存储着属性的值,也就是属性的数据. [[Writable]] 存储着一个布尔值,表明该属性的值是否可以改变. 下面是命名访问器属性拥有的特性: [[Get]] 存储着getter,也就是在读取这个属性时调用的函数.该函数返回的值也就是这个属性的值. [[Set]] 存储着setter,也就是在为这个属性赋值时调用的函数.该函数在调用时会被传入一个参数,参数的值为所赋的那个新值. 下面是两种类型的属性都有的特性: [[Enumerable]] 存储着一个布尔值.可以让一个属性不能被枚举,在某些操作下隐藏掉自己(下面会有详细讲解). [[Configurable]] 存储着一个布尔值.如果为false,则你不能删除这个属性,不能改变这个属性的大部分特性(除了[[Value]]),不能将一个数据属性重定义成访问器属性,或者反之.换句话说就是:[[Configurable]]控制了一个属性的元数据的可写性.
    查看全部
  • get\set方法2: function foo(){} Object.defineProperty(foo.prototype,'z',{get:function(){return 1;}}); var obj=new foo(); obj.z;//1 obj.z=10;//obj自身没有z属性,当尝试给这个属性赋值的时候,他就会执行原型链中的get/set方法,不会去给当前对象obj添加新属性。 obj.z;//1 此时给obj加一个z属性呢 Object.defineProperty(obj, 'z', {value:100,configurable: true});//[[Configurable]] 存储着一个布尔值.如果为false,则不能删除这个属性 obj.z;//100 此时就添加成功 delete obj.z; //将obj自身的z属性删除 obj.z; //1 又会运行原型链中的get方法,而值还是1说明原型链中的get方法没有受到影响
    查看全部
  • set \ get方法,是关键字 var man={ weibo:'@Bosn', $age:null,//$age只是一个特殊的key而已 get age(){ if(this.$age == undefined){//如果是null或者undefined都会返回true return new Date().getFullYear() - 1991; } else{ return this.$age; } }, set age(val){ val=+val;//尝试将字符串转化为数字 if(!isNaN(val) && val < 150){ this.$age=+val; } else{ throw new Error('Incorrect val=' + val); //让它报错 } } }; console.log(man.age);//24 man.age=100;//100 consoel.log(man.$age);//100 man.age='abc';//Uncaught Error: Incorrect val=NaN
    查看全部
  • cat.hasOwnProperty('legs');//判断对象是否有自己的属性legs cat.propertyIsEnumerable('toString');//判断对象的属性或函数是否可枚举(可枚举的时候,for in遍历可输出) 用Object.defineProperty()给已经存在的对象定义属性,默认enumerable属性为false,即不可枚举。 eg:Object.defineProperty(cat,'price',{enumerable: false, value: 1000}); var o={x:1,y:2,z:3}; var obj=Object.create(o); obj.a=4; var key; for(key in obj){ if(obj.hasOwnProperty(key)){ console.log(key); } }// result:a //此方法可以遍历出对象的自己的属性
    查看全部
  • 函数声明 函数表达式 函数构造器 命名函数
    查看全部
  • 数组的基本方法
    查看全部
  • 9-22 模块化: 模块化函数内部变量不会泄漏到全局作用域。 两种方法 1.定义立即执行函数 moduleA = function(){}(); 2.this 方法 moduleA = new function(){ var prop = 1; function func(){} this.func = func; this.prop = prop; }
    查看全部
  • 9-21属性
    查看全部
  • 9-20 抛出异常
    查看全部
  • 9-18 子类调用被覆盖的父类方法: 父类.prototype.被覆盖函数名.apply(this, arguments); 链式调用: 结尾时返回this,这样就一直返回自己就可以形成链式调用了
    查看全部
  • 9-18 继承 1 person.call() 调用 person 的构造器;调用基类的属性 2 person.prototype.init.apply();调用子类的方法,有可能子类覆盖基类的方法 调用子类方法 子类调用被覆盖的父类方法: 父类.prototype.被覆盖函数名.apply(this, arguments); return this;//返回addClass实例
    查看全部
  • 9-17 重载:同名函数,不同参数(个数、类型) js是弱类型语言,并且不强制参数个数 不能直接实现继承属性,使用原型链通过arguments和this指向实现属性参数的继承
    查看全部
  • 5种原始数据类型:number,null,undefined,boolean,string 1种对象类型:focuntion,array,date
    查看全部
  • bind与new 一起使用时,因为new返回的是对象,一般是返回this对象,就是函数本身。所以即使该函数使用bind绑定指定对象,在new的情况下还是会返回this本身的对象,而不是绑定的指定对象。
    查看全部
  • fun.bind(obj,args...);//第一个参数是要绑定的对象,而之后的参数是函数的实参。 假如: this.d=110;//定义全局变量d; function foo(a,b,c) { console.log(a+","+b+","+c+","+this.d); } var o={d:152;}; foo.bind(o,1,2,3);//1,2,3,152; this指向绑定对象 foo.bind(null,1,2,3);//1,2,3,110 this指向全局对象 bind :函数颗粒化的作用,意思是可以把实参一个个保存起来。 如: function fun(a,b,c){ return a+b+c; } var t=fun.bind(null,100); //把实参100绑定到形参a中 var g=t.bind(null,200); //把实参200绑定到形参b中 g(10); //结果:310 g(50); //结果:350 该效果经常用在某函数中有很多参数是相似的,但又一些不一样
    查看全部

举报

0/150
提交
取消
课程须知
1.您至少学习了本站“JS入门”、“JS进阶”两门基础课程。 2.如您具备一定实践经验对学习有很大帮助。 3.如您没有脚本编程开发经验,学习过程有可能会受挫部分内容或示例代码,请“暂时略过不懂的部分,后面章节会阐述”,当然想透彻学习,还需大量实践来体会知识的内涵。
老师告诉你能学到什么?
结合实例,深入解析以下知识内容: 1. 数据类型、表达式和运算符、语句; 2. 对象、数组、变量、函数; 3. this、闭包和作用域; 4. OOP; 5. 正则与模式匹配。

微信扫码,参与3人拼团

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!