前言
var obj = {
name : "sjm" ,
age : "27"
}
// 对象的创建方法
1. 对象字面量 / 对象直接量 var obj = { }; //plainObject
2. 构造函数
1) 系统自带的构造函数 var obj = new Object;
2) 自定义( 函数 ) 大驼峰式命名规则 TheFirstName()
构造函数内部原理(构造函数被new之后发生)
1.在函数体最前面隐式的加上 var this = {}.
2. 执行this.xxx = xxx;
3. 隐式的返回this;//如果显式的返回空对象,return{} ,那么构造函数就会变成空值 但是如果返回原始值,例如123,“abc”等,return 123; 那么函数会正常返回,不受 影响,不会返回123,“abc”这一类原始值,相当于还是隐式地返回了this,return this
包装类(Number,String,...)
var str = "4";
str.length = 3; // 原始值数字没有属性,这里会隐式的转换成包装类,然后删除。
new Number().length = 3; delete length; 操作都是在包装类上进行的,对原有的数字没有影响
console.log ( str.length ) ; //1
var arr = [ 1, 2, 3, 4];
arr.length = 2;
console.log( arr ); // [1, 2]
插一道常见的闭包练习题
function Person ( name, age, sex) {
var a = 0;
this.name = name;
this.age = age;
this.sex = sex;
function sss( ) {
a++;
console.log( a );
}
this.say = sss;
}
var oPerson = new Person ( ) ;
oPerson.say ( ) ; //1
oPerson.say ( ) ; //2
var oPerson1 = new Person ( ) ;
oPerson1.say ( ) ; //1
/* 被重现new了之后,就会产生一个新的执行期上下文,Person函数被重新执行,a也被重新赋值
如果不重新new的话,sss方法里的a就一直指向Person函数里的a变量,访问的是同一个值
*/
var x = 1, y = z = 0;
function add ( n ){
return n = n+ 1;
}
y = add ( x ) ;
function add ( n ){
return n = n+ 3;
}
// x = 1; y = 4; z = 4; 函数预编译时候会提升,只走后面的add()
网友评论