构造函数基础

1, 构造函数模式:用函数封装来创建对象

 1 // 工厂模式 这种创造了很多function
 2     function createPerson(name, age, job){
 3         var o = new Object();
 4         o.name = name;
 5         o.age = age;
 6         o.job = job;
 7         o.sayName = function(){
 8             console.log(this.name);
 9         }
10         return o;
11     }
12 
13     var person1 = createPerson("Nick", 89, "SDE");
14     person1.sayName();
15     var person2 = createPerson("Devil", 189, "SDE");
16     person2.sayName();

2. 构造函数模式(执行了4个步骤:隐式创造对象,将构造函数的作用域赋值给新对象,执行构造函数的代码,在返回新对象)

 1 // constructor  隐式得创造了对象,将构造函数的作用域赋值给新对象,执行构造函数中的代码, 然后再返回了此对象============================
 2     function Person(name, age){
 3         this.name = name;
 4         this.age = age;
 5     }
 6     Person.prototype.sayName = function(){
 7         console.log(this.name);
 8     }
 9 
10     var p1 = new Person("zhaoxi" , 22);
11     p1.sayName();
12 
13     console.log(p1.constructor);

3. 原型链模式

    实例.constructor = 构造函数;

    构造函数.prototype.constructor = 构造函数;(有例外)

    实例的指针始终是指向构造函数的原型链的,而不是构造函数本身。那么实例是如何同时继承两边的属性呢?从上面第二条可以知道啦。

 

 1 // 
 2     function Car(){
 3     
 4     }
 5 
 6     var car1 = new Car();
 7     console.log(car1.constructor); // Car(){}
 8     console.log(Car.prototype.constructor); // Car
 9 
10     function Bird(){}
11     Bird.prototype = {    // 这里重写了原型对象,已经不是原来的啦
12         name : "xian",
13         sayName : function(){
14             console.log(this.name);
15         }
16     };
17     var bird1 = new Bird();
18     console.log(bird1.constructor);// Object()
19     console.log(Bird.prototype.constructor); // Object

 

 

 

posted @ 2013-10-14 16:43  楚玉  阅读(136)  评论(0编辑  收藏  举报