| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- <!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 fn() {
- // return 5;
- // };
- // console.log(fn())
- // // 匿名函数
- // let fn1 = function() {}
- // // 立即执行函数
- // (function() {})();
- /**
- * 构造函数
- * 1.首字母大写
- * 2.new进行实例化调用
- * 3.this指向当前实例
- * 4.不用return进行反值
- * 属性写在构造函数中
- * 方法写在原型中
- * 构造函数中自带了prototype属性 指向的是当前构造函数的原型
- */
- function Fn() {
- // console.log(this)
- this.name = '图图';
- this.age = 3;
- Fn.prototype.address = function () {
- console.log("我家住在翻斗花园");
- }
- }
- // 实例化调用
- let f = new Fn();
- console.log(f);
- f.address();
- /**
- * 原型:
- * 1.所有的构造函数中都自带了一个prototype属性(显性),该属性指向的就是当前构造函数的原型
- * 2.所有的构造函数都自带了一个构造器constructor(隐性),该属性指向的是当前原型的构造函数
- * 3.构造函数可以通过new进行实例化 产生该构造函数的实例化对象
- * 4.实例化对象 可以通过_proto_(隐性)方法 访问到该构造函数原型中的属性和方法
- */
- function Person() {};
- var person = new Person();
- console.log(person.__proto__ == Person.prototype);
- console.log(Person.prototype.constructor == Person);
- console.log(Object.getPrototypeOf(person) === Person.prototype);
- /**
- * 原型链
- * 访问对象属性时 先从对象本身去进行寻找
- * 通过_proto_去原型上找
- * 若还未找到 则在原型对象的原型上找 找到则返回 找不到则返回undefined
- */
- </script>
- </body>
- </html>
|