js总结 (3)对象的创建方法,构造函数,包装类等
一.创建对象
<script>
// 使用Object创建对象
// var car = new Object();
// car.name = 'merz'
// car.color = 'red';
// 对象字面量创建对象
// var car = {
// name :"BMW",
// color :"blue"
// };
// 局限性:当需要创建n个同类重复对象时,需要重复代码n次。
// 工厂模式
function Car(color) { this.name="Audi"; this.age=3; this.color=color; this.health=function () { console.log(this.age); this.age--; return; } } var car1= new Car("red"); car1.age=5;
有new发生的隐式三步变换
1.在函数体最前面隐式的加上this ={}
2.执行this.XXX = XXX
3.隐式的返回this
二.构造函数
包装类 基本原始值
1.Number()
2.String() 默认有length属性而且不可赋值
3.Boolean()
重点:原始值没自定义有属性和方法 不能给原始值赋值(赋值也不会报错)
<script> var num = 4; num.len = 3; // 违法语句 用包装类类解
//new number(4).len=3; delete
//系统自动生成一个newNumber(4)(现在不为原始值所以可以赋值)再为其赋属性值len,操作完以上步骤随即销毁。
console.log(num.len);// 访问 undefined
</script>
<script type = "text/javascript"> var str = "abc"; str += 1; var test = typeof(str); //test = "string" if(test.length == 6) { test.sign = "typeof的返回结果可能为string"; //因为前面有test = "string",所以现在是string类型 //new String(test).sign = 'xxx'; } //new String(test).sign 销毁 console.log(test.sign); </script> //undefined
不同的人调用工厂的函数 他们一开始是一样的后面的改变 互不相干 比如下面
<script type = "text/javascript"> 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(); oPerson.say(); var oPerson1 = new Person(); oPerson1.say(); </script> //1 2 1