12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script>
- /*
- 原型prototype
- 我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
- 每个函数的prototype都是不一样的
- 这个属性对应着一个对象,这个对象就是我们所谓的原型对象
- 如果函数作为普通函数调用,prototype没有任何作用
- 当函数以构造函数调用时,它所创建的对象中都会有一个隐含的属性,
- 指向该构造函数的原型对象,我们可以通过__proto__来访问该属性(注意前后都是两个下划线)
- 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象
- 我们可以将对象中共有的内容,统一设置到原型对象中
- 当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用
- 如果没有则会去原型对象中寻找,如果找到则直接使用
-
- 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,
- 这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了
- */
- function Person(){
- }
- function MyClass() {
- }
- // console.log(Person.prototype);
- // console.log(Person.prototype == MyClass.prototype);//false
- //向MyClass的原型中添加属性a
- // MyClass.prototype.a = 123;
- // //向MyClass的原型中添加一个方法
- // MyClass.prototype.sayHello = function(){
- // alert("hello");
- // }
- // var mc = new MyClass();
- // var mc2 = new MyClass();
- // console.log(mc.__proto__);
- // console.log(mc2.__proto__ == MyClass.prototype);
- // //向mc中添加a属性
- // mc.a="mc中的a";
- // console.log(mc.a);
- // console.log(mc2.a);
- // mc.sayHello();
- /*
- 函数修改的补充
- */
- function Person(name,age,gender){
- this.name = name;
- this.age = age;
- this.gender = gender;
- }
- //向原型中添加sayName方法
- Person.prototype.sayName = function(){
- console.log('hello,大家好,我是'+this.name);
- }
- //创建一个Person的实例
- var per = new Person("孙悟空",28,"男");
- var per2 = new Person("猪八戒",38,"男");
- per.sayName();
- per2.sayName();
- console.log(per.sayName == per2.sayName);
- </script>
- </head>
- <body>
- </body>
- </html>
|