自学js第十天:JS对象和this和执行上下文( 五 )

>var num =1;console.log(num instanceof Number); //false //因为字面量num是基本类型number,而不是Number包装类对象,因此/*var numObj = new Number(num);numObj.toString() 以上是js引擎帮我们自动num字面值转为包装类Number临时对象才可以让num去调用toString()方法,其实是包装类对象去numObj.toString()最后,才等于字面量 num.toString()*///numObj=nullconsole.log(num.toString()); //'1' //那为什么这里字面量却可以调用方法呢? 只有对象才能调用方法的吧?//原理:JS和java不同,js可以直接字面值变量去 . 调方法,//因为基本数据类型number在使用 点.调用 的时候js会帮我们自动生成一个Number包装类临时对象,//.调用用完会马上null自动销毁对象,如下.//相反如果字面量是一个真实的对象.则可以直接instanceof亲子鉴定对象类型.//想要是true,必须得是'对象'才可以用instanceof亲子鉴定比较.var numObj = new Number(1);console.log(numObj instanceof Number);//true //string基本类型案例:var str = 'N好啊';//下面是看不见隐式的生成,JS不会告诉你.// var strObj = new String('N好啊');// strObj.a = 'wob'; //strObj.toLowerCase()str.a = 'wob';// strObj = null;调用完临时对象,立马销毁,轮到当前的字面值去输出.console.log(str.a); //undefinedconsole.log(str.toLowerCase());//n好啊 // 这里和上面Number一样,基础类型string的字面值在使用.的时候//其实JS自动是临时包装对象String类,然后其实是对象String的a属性,因此String内部没有a属性,//而自己不能自定义内置a属性,因此只能当成普通定义的var a;结果是undefined,//而.toLowerCase()方法是内置,String可以直接调用.//总结: 基本类型 VS 引用类型var str = 'fdsfsd'; //一个值字面量值也不是一个对象 string基本类型的字面量var strO = new String('fdsfsd');//一个对象 一出生就有各种标准属性和方法//在 字面量值直接进行对应类型方法或者属性调用的时候 // 会套上一层包装对象来做 做完之后 包装对象销毁console.log(strO, str.toLocaleLowerCase()); // String "fdsfsd"// 对象 是否是 某个构造函数厂生产的console.log(str instanceof String); //false(无包装过的)console.log(strO instanceof String); //true(有包装过的)
六.深入构造函数()1.面向对象编程’的第一步,就是要new生成对象 。而js中面向对象编程是基于构造函数()和原型链()的 。2.前面说过,“对象”是单个实物的抽象 。通常需要一个类模板,表示某一类实物的共同特征,然后“对象”根据这个模板生成 。3.js语言中使用构造函数()作为对象的模板 。所谓构造函数,就是提供一个生成对象的模板,并描述对象的基本结构的函数 。一个构造函数,可以生成多个对象,每个对象都有相同的结构模板(比如都有名有姓) 。
function Person(name,age,sex){ //Person就是构造方法函数this.name = name;this.age = age;this.sex = sex;this.speak = function(){console.log('我叫' + this.name + ',今年:' + this.age + '岁,性别:' + this.sex);}}var p1 = new Person('小李',11,1);var p2 = new Person('小里',11,1);var p3 = new Person('小名',11,1);
//构造函数注意点:a:构造函数的函数名(类名)的第一个字母通常大写 。b:函数体内使用this关键字,代表所要生成的对象实例 。c:且生成对象的时候,必须constructor构造 + new命令才能调用构造函数 。
七.了解new关键字. (使用new即会自动调用对象函数,进入构造函数去赋值生成一个对象,然后this指向该对象,最后返回给new的左边的var变量)
构造函数 ,是一种特殊的函数 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。