123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
- <body>
- <script>
- // function fn1() {
- // console.log(this,'fn1')
- // return 1;
- // }
- // console.log( fn1())
- /**
- * 构造函数
- * 1.首字母大写
- * 2.使用时 通过new去进行实例化
- * 3.this执行当前函数本身
- * 4.反出值 不用return
- * 属性 写在构造函数下
- * 方法 写在原型下
- */
- // function Fn2() {
- // console.log(this,'fn2');
- // return 2
- // }
- // console.log(new Fn2(),'调用')
- function Person(name, age) {
- this.name = name;
- this.age = age;
- console.log(this.name, this.age)
- }
- Person.prototype.address = function () {
- console.log('我叫' + this.name, '我叫住在翻斗花园')
- }
- let p1 = new Person("图图", 3)
- console.log(p1)
- p1.address();
- /**
- * 原型:
- * 1.构造函数中自带了constructor(构造器)和prototype(原型对象/显性方法)
- * 2.实例对象中自带了_proto_方法 指向当前对象原型
- * 3.prototype 与 _proto_ 等价的
- * 4.constructor指向的是prototype的构造函数
- *
- * 原型链:
- * 访问对象属性时 先从对象本身属性上寻找
- * 通过 _proto_ 去原型上寻找
- * 若还没找到 则在原型对象prototypes上寻找 找到就返回 未找到(undefined)/null
- *
- *
- *
- *
- * 面试题
- * 所有的函数数据类型都天生自带一个prototype属性,该属性的属性值是一个对象,指向原型
- prototype的属性值中天生自带一个constructor属性,其constructor属性值指向当前原型所属的构造函数/类
- 所有的对象数据类型(实例),都天生自带一个_proto_属性,该属性的属性值指向当前实例所属类的原型
- 总结
- 把所有的对象共用的属性全部放在堆内存的一个对象(共用属性组成的对象)
- ,然后让每一个对象的 __proto__存储这个「共用属性组成的对象」的地址。
- 而这个共用属性就是原型,原型出现的目的就是为了减少不必要的内存消耗。
- 而原型链就是对象通过__proto__向当前实例所属类的原型上查找属性或方法的机制
- ,如果未找到,则去Object的原型上找,还是没有找到想要的属性或者是方法则查找结束,
- 最终会返回undefined
- */
- </script>
- </body>
- </html>
|