JS(十二)对象,包装类(下)

写在最前面

构造函数内部原理

  • 在函数体最前面隐式的加上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
//以上就是包装类

可以关注一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值