JavaScript基础教程程序员

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

2018-03-13  本文已影响18人  StevenTang

写在最前面

构造函数内部原理

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
//以上就是包装类
上一篇 下一篇

猜你喜欢

热点阅读