构造函数及实例化原理

    1. function Car () {
    2. this.color = 'red'
    3. }
    4. console,log(Car) // 没有意义 不执行是不存在的
    5. Car() // 这个时候相当于 window.car() 函数体内是window.color = 'red'
    1. function Car (color,brand){
    2. this.color = color
    3. this.brand = brand
    4. return this
    5. }
    6. let car1 = new Car ('red','Benz')

    其实 Car () 执行 是吧window.Car() 执行了在GO里面
    AO 保存color brand

    但是有一个new 之后 会在 AO 里面生成一个this对象
    变成

    1. AO:{
    2. this:{
    3. }
    4. }

    最后function (){} 会隐式 return this

    如果构造函数的返回值是原始值的话 返回this ,如果是引用值是可以的

    1. function Car (color){
    2. this.color = color
    3. return 123
    4. }
    5. let car = new Car (‘red’)
    6. console,log(car) // red
    1. function Car (color){
    2. this.color = color
    3. return {}
    4. }
    5. let car = new Car (‘red’)
    6. console,log(car) // {}

    包装类
    new Number new Boolean new String 都有这样的特性

    1. let a = 1
    2. let aa = new Number(1)
    3. aa.name = 'aa' //
    4. let b = aa + 1 // 2 失去了包装类

    image.png

    原始值没有方法和属性,不能使用 a.b 这样赋值,但是强行这样写 会 根据类型 new Number () / new Boolean () / new String () 会有一个 new Number(123).len = 3 的过程 ,但是构造函数返回的结果没有变量保存,就会delete 掉

    1. var a = 123
    2. a.len = 3 js做了 new Number(123).len = 3 delete
    3. consolo.log(a.len) // undefined =======> 但是没有保存下来
    4. var b = '123'
    5. consolo.log(a.length) // 3

    字符串.length 就是通过包装类来

    1. let arr =[1,2,3,4,5]
    2. arr.length = 3 // arr = [1,2,3]
    3. let arrSec = [1,2,3,4,5]
    4. arrSec.length = 6 // arrSec = [1,2,3,4,5,empty]
    5. let str = 'abc'
    6. str.length = 1
    7. console.log(str) // 'abc'
    8. //-----------------------------------------------
    9. str.length => new String(str).length
    10. str.length = 1 => new String(str).length = 1 delete

    配合 js 得一个函数 string.charCodeAt(0 /‘’位数’/)
    image.png

    1. function getS(str) {
    2. let num = 0
    3. for (let i = 0; i < str.length; i++) {
    4. console.log(str.charCodeAt(i));
    5. if (str.charCodeAt(i) > 255) {
    6. num++
    7. }
    8. }
    9. console.log(num);
    10. return str.length + num
    11. }
    12. console.log(getS('你好朋友'));