1.函数闭包
var scope = "global scope";
function checkScope (){
var scope = "local scope";
function f(){return scope;}
return f;
}//checkScope ()()输出local scope
var scope = "global scope";
function checkScope (){
var scope = "local scope";
function f(){
return scope;
}
return f();
}//checkScope()输出local scope
2.with语句 ,将对象属性作用域链添加至顶层(在严格模式中不可用)function Lakers() {
this.name = "kobe bryant";
this.age = "28";
this.gender = "boy";
}
var people=new Lakers();
with(people)
{
var str = "姓名: " + name + "<br>";
str += "年龄:" + age + "<br>";
str += "性别:" + gender;
}
(function (){
alert(str);
}()); //输出 姓名: kobe bryant<br>年龄:28<br>性别:boy
3.为js添加断点
function ddd(o){
if (o==undefined)
{
debugger;
};
}
4.对象引用,引用值改变,原对象值也跟着变。function a(){ //use constructor
this.user="user";
this.pwd="pwd";
this.get="get";
return this;
}
var c = a();
(function (){
alert(c.user);
var b = c;
b.user = "ddd";
alert(c.user);
}());//输出:user ddd
5.创建对象的几种方式。//通过构造函数创建
var obj = new ddd("a1","a2");
function ddd (a1,a2,){
this.a1=a1;
this.a2=a2;
}
//对象直接量
var obj = {a1:"ddd",a2:"ccc"};
//通过继承来创建
var a = {x:1,y:2};
var obj = Object.create(a);//obj继承了a
6.获取对象可枚举属性
//获取对象属性名称,返回数组
Object.getOwnPropertyNames(obj);
//获取对象属性,返回数组
Object.keys(obj);
7.对象存取器属性
var o = {
$n:0,//$暗示私有属性
get getN(){return this.$n;},
set setN(n){this.$n=n;}
} ;
(function (){
o.setN=4;
alert(o.getN);
}());//输出 4
8.获取对象属性特性//是否可读
Object.getOwnPropertyDescriptor({x:1},"x").writable
//获取属性值
Object.getOwnPropertyDescriptor({x:1},"x").value
//是否可枚举
Object.getOwnPropertyDescriptor({x:1},"x").enumerable
//是否可配置,该property的属性是否可以修改,property是否可以删除。
Object.getOwnPropertyDescriptor({x:1},"x").configurable
9.定义属性特性,不能定义继承的属性 var a = {x:1};
Object.defineProperty(a,"x",{value:4,writable:false,configurable:true,enumerable:true});
a.x = 3;
alert(a.x);//输出 4
//定义多个属性特性
(function (){
var a = {x:1,y:2,$n:0,get getN(){return this.$n;}};
Object.defineProperties(a,{x:{value:4,writable:false,configurable:true,enumerable:true},
y:{value:4,writable:false,configurable:true,enumerable:true},
getN:{get:function(){return this.$n+2;},configurable:true,enumerable:true}
});
a.y = 3;
alert(a.getN);/输出 2
}());