-
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
提交
取消