new操作符

  1. let squareList = []
  2. let widthList = [5,6,5,6,5,6,5,6,5,6,5,6]
  3. function Square(width){
  4. this.width = width
  5. }
  6. Square.prototype.getArea = function(){
  7. return this.width * this.width
  8. }
  9. Square.prototype.getLength = function(){
  10. return this.width * 4
  11. }
  12. for(let i = 0; i<12; i++){
  13. squareList[i] = new Square(widthList[i])
  14. console.log(squareList[i].constructor)
  15. }

new X()自动做了四件事

  • 自动创建空对象
  • 自动为空对象关联原型,原型地址指定为X.prototype
  • 自动将空对象作为this关键字运行构造函数
  • 自动return this

    构造函数X

  • X函数本身负责给对象本身添加属性

  • X.prototype对象负责保存对象的共有属性

    代码规范

  • 所有构造函数首字母大写

  • 所有被构造出来的对象,首字母小写
  • new后面的函数使用名词形式
  • 其他函数一般用动词开头

    对象. proto === 其构造函数.prototype

    类型vs类

    类型

    类型是JS数据的分类,分为number,string,symbol,boolean,null,undefined,object

    类是针对于对象的分类,有无数种,常见的有Array,Function,Date,RegExp等

    数组对象

    定义一个数组

    1. let arr = [1,2,3]
    2. let arr = new Array(1,2,3) //元素为1,2,3
    3. let arr = new Array(2) //长度为3

    数组对象的自身属性

    ‘0’/‘1’/‘length’

    数组对象的共用属性

    ‘push’/‘pop’/‘shift’

    函数对象

    定义一个函数

    1. function fn (x,y) {return x + y)
    2. let fn2 = function fn (x,y) {return x + y}
    3. let fn = (x,y) => x + y
    4. let fn = new Function ('x', 'y', 'return x + y')

    函数对象的自身属性

    ‘name’/‘length’

    函数对象的共用属性

    ‘call’/‘apply’/‘bind’

    JS终极一问

    window是谁创造的

    Window

    window.Object是谁创造的

    window。Function

    window.Function是谁创造的

    window.Function
    浏览器构造了Function,指定了它的构造者为自己,所有函数都是window.Function构造的。

    class和prototype两种写法

    1. function Person (name, age) {
    2. this.name = name
    3. this.age = age
    4. }
    5. Person.prototype.sayHi = function () {
    6. console.log("你好,我叫" + this.name)
    7. }
    1. class Person {
    2. constructor(name, age) {
    3. this.name = name
    4. this.age = age
    5. }
    6. sayHi () {
    7. console.log("你好,我叫" + this.name)
    8. }
    9. }