对象
- 对象的创建方法
1.var obj = {} plainobject 对象字面量/对象直接量
2.构造函数
1)系统自带的构造函数 Object()
2)自定义
var obj = new object();执行一次生产一个对象 而
且每次生产的对象都是一模一样的 但是且相互独
立的
var obj = {};与上面的表达式一样 - 大驼峰命名规则 但凡是个单词 首字母就得大写
TheFirstName 小驼峰是就首字母不用大写 剩下
都得大写
function Car(color) {
this.color = color;
this.name = "BMW";
this.height = "1400";
this.lang = "4900";
this.weight = 1000;
this.health = 100;
this.run = function () {
this.health --;
}
}
var car = new Car('red');通过参数来改变函数 发
生自定义环节
var car1 = new Car('green');
car.name = "Maserati";
car1.name = " Merz";两个name互不影响
function Student (name,age,sex){
//var this = {name : "" age:"" };
this.name = name;
this.age = age;
this.sex = sex;
this.grade = 2017;
//return this;
}
var student = new Student ('zhangsan', 18, 'male');
console.log(new Student ('zhangsan', 18, 'male').name);
- 构造函数内部原理
1.在函数体最前面隐式的加上this = {}
2.执行 this.xxx = xxx;
3.隐式的返回this
只有存在new的情况下才会发生以上三步,否则就是正常函数执行
//包装类
var num = 4 ;
num.len = 3;
//new Number(4).len = 3; delete
//
//new Number(4).len
console.log(num.len);=>underfined
var str = "abcd";
str.length = 2;
//new String('abcd').length = 2; delete
//new String('abcd').length
console.log(str.length)=>4
原始值是不能操作属性的 但是str本身就有length这个属性 而num没有length这个属性
var str = "abc";
str += 1;
var test = typeof(str);//test == "string"
if(test.length == 6) {
test.sign = "typeof的返回结果可能为String“;
}//new String(test).sign = 'xxx';
//new String(test).sign
console.log(test.sign);=>underfined - 包装类的一些问题
var str = "abc";
/new String('abc').length
console.log(str.length) ->3
正常来讲原始值str是没有属性的,但是程序为了
不报错,隐式的进行了一个操作,于是构造了一个
字符串对象的构造函数new String( ),然后将内
容‘abc’放在里面,把这个对象进行 . length操作,这
个过程就是包装类(主要是原始值没有属性和方
法,但是生成得对象可以有属性)
var num = 123;
num.abc = “abc”
/new Number(num).abc = 'abc'; ->delete(为了
不让它报错 执行完就删除了)
/两个长得一样,彼此独立,上面那个已经被销毁
了,下面那个是重新建立得
/new Number(num).abc
console.log(num.abc) ->underfined