JS(十二)对象,包装类(下)
2018-03-13 本文已影响18人
StevenTang
写在最前面
构造函数内部原理
- 在函数体最前面隐式的加上this = {}
- 执行this.xxx = xxx
- 隐私的返回this
function Student(name,age,sex){
//第一步 在函数体最前面隐式的加上this = {}
//var this = {};
//AO{this:{
// name:"",
// age :
//}}
this.name = name;
this.age = age;
this.sex = sex;
this.grade = 2017;
//最后一步隐私的返回this
//return this;
}
//前提是new
var student = new Student('zhangsan',18,'male');
function Person (name,height){
//var this ={};
this.name = name;
this.height = height;
this.say = function(){
console.log(this.say);
}
}
//一旦new Person();
//里面就有个var this = {};
console.log(new Person('xiaowu',180).name);
//打印xiaowu
//我们既然知道有了隐私的三步那我们来模拟一下
function Person(name,height){
var that = {};
that.name = name;
that.heigth = heigth;
return that;
}
var person = Person("xiaowu",180);
var person1 = Person("xiaozhao",170);
//也可以简单的模拟一下
包装类
var num = 123;
//这个是个原始值.原始值是不能有属性和方法的.
那么数字都是是原始值?
不对,只有原始值数字才是原始值
var num = new Number(123);
//打印出来是Number{[[PrimitiveValue]]:123}
//对象的形式返回
//也可以增加属性
num.abc = "a";
console.log(num.abc)//打印出来a
//在num,就看到在num里面多了num.abc里面的属性
//但是它也可以计算
num*2 == 246;
String 和boolean也是一样的
小知识
undefined 和null不能有属性
var num = new Number(123);
var bol = new boolean("true");
var str = new String('abcd');
结论 : 原始值不能说属性和方法,对象才可以有
那么我来看看下面的例子
var str = "abcd";
str.length//打印出来4
为什么这个原始值的长度可以访问,但是明确又规定了原始值是没有属性和方法的
str.abc = "a";
上面我们试着给str附上属性和属性值,结果没有报错,然后我们访问这个属性,也没有结果。
原始值是不会有方法的,但是他为什么能调用呢,因为他经历了一个过程,叫包装类。
var str = "String";
str.length = 6;
//为什么可以 因为在执行方法的时候,电脑隐式的给你 new Numbar(str)
//之后在str.length = 6
//执行完之后在给你销毁掉delete
//以上就是包装类