JavaScript ----------------- 原型式继承

思想:借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。为了达到这个目的,看看下面的实现方式

  

1        function object(o){
2             function F(){
3
4             }
5             F.prototype=O;
6             return new F();
7         };

在上面的代码段中主要做了哪些事情尼?

  创建了一个临时的构造函数,同时把传入参数作为临时构造函数的原型,最后返回一个临时构造函数的实例;从本质上来讲,object 对传入其中的对象执行了一次浅复制;

  

 1            //看实例:      function object(o){
 2             function F(){
 3
 4             }
 5             F.prototype=o;
 6             return new F();
 7         };
 8
 9         //在上面中
10
11         var person={
12             name:"Nicholas",
13             friends:["Shelby","Court","Van"]
14         }
15
16         var person1 = object(person);
17         person1.name = "Greg";
18         person1.friends.push("Rob");
19
20
21         var person2 = object(person);
22         person2.name = "Linda";
23         person2.friends.push("Barbie");
24
25         alert(person.friends); // Shelby Court Van Greg Rob

对于这种继承方式必须依赖于存在一个对象作为另一个对象的基础。如果有这么一个对象的话,可以把它传递给object()函数,然后再根据具体需求对得到的对象加已修改即可。

实例从结果可以看出,person1与person2 就是person对象的副本。

ECMAScript5中通过新增Object.create() 方法规范化了原型式继承。这个方法接收两个参,当只传一个参数的时候与object()行为相同。

@param1   接收一个对象
@param2   可选  接受一个为新对象定义的额外属性的对象,类似 Object.defineProperties()方法的参数格式相同:每个属性都是通过自己的描述符定义的;已这种方式创建属性都会覆盖原型上的同名属性。
Object.create()
        var person={
            name:"Nicholas",
            friends:["Shelby","Court","Van"]
        }

        var person1 = Object.create(person,{
            name:{
                value:"Greg"
            }
        });
        person1.name;  // Greg   

     
 1       var person={
 2             name:"Nicholas",
 3             friends:["Shelby","Court","Van"]
 4         }
 5
 6         var person1 = Object.create(person,{
 7             name:{
 8                 value:"Greg",
 9                 enumerable:false
10             }
11         });
12        name in person1;  // false
13         

  综合上一篇的组合继承,在没有必要创建构造函数,而指想让一个对象与另一个对象保持类似的情况下,原型式继承是完全可以胜任的。不过别忘了,包含引用类型值得属性始终都会共享相应的值,就像使用原型模式一样。

 

  

时间: 2025-01-16 19:25:54

JavaScript ----------------- 原型式继承的相关文章

javascript原型式继承

之前的文章里有提到过javascript类式继承,那种继承方式极大的方便了其他语言(非javascript)程序员使用javascript来实现继承,但是有缺点,就是建立了一个非必要的构造函数,那这篇文章我们来谈一谈具有javascript自身特色的原型式继承. 我们先来看一看下面的代码: var Car = { color: 'red', size: 'big', getAttr: function() { return this.color } } var car1 = Object.cre

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下

javascript中类式继承和原型式继承的实现方法和区别

在所有面向对象的编程中,继承是一个重要的话题.一般说来,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合(让一个类继承另一个类可能会导致二者产生强耦合).关于“解耦”是程序设计中另一个重要的话题,本篇重点来看看在javascript如何实现继承. 其它的面向对象程序设计语言都是通过关键字来解决继承的问题(比如extend或inherit等方式).但是javascript中并没有定义这种实现的机制,如果一个类需要继承另一个类,这个继承过程需要程序员自己通过编码来实现. 一.类式

JavaScript中的继承之原型式继承

原型式继承的思想是借用原型可以基于已有的对象创建新对象,同时还不比因此创建自定义类型. 为了达到这个目的,给出如下函数: function object(o){ function F(){} F.prototype = o; return new F(); } 在object()函数内部,先创建一个临时性的构造函数,将传入的对象作为这个构造函数的原型,最后返回这个函数的新实例.说白了,就是对传入的对象执行一个浅复制. function object(o){ function F(){} F.pr

JavaScript之面向对象学九(原型式继承和寄生式继承)

一.原型式继承 该继承模式是由道格拉斯*克罗克福德在2006年提出的实现继承的方法. 模式的基本思路:借助原型可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型. 代码如下: function object(o) { function F() { //定义一个F类型的对象 this.name="111"; } F.prototype=o;//使F的原型对象指向传入对象,也就是说F继承了传入的对象,也相当于用传入的对象重写了F的原型对象 相当于如下代码 /* F.prototy

Javascript继承4:洁净的继承者----原型式继承

//原型式继承 function inheritObj(obj){ //声明一个过渡函数对象 function F(){} //过渡对象的原型继承父对象 F.prototype = obj; //返回过渡对象的一个实例,该实例的原型继承了父对象 return new F(); } /* * 这种方式是对类式继承的一个封装,所以类式继承中存在的缺点这里依然存在 */ var car = { id:1, color:['red'] } var car1 = inheritObj(car); car1

JavaScript之原型式继承&amp;寄生式继承和寄生组合式继承以及优缺点

一.原型式继承 1.这种方法并没有使用严格意义上的构造函数,借助原型可以基于已有的对象创建新的对象 function object(o) { function F() {} F.prototype = o; return new F(); } // 在object()函数内部,先创建一个临时性的构造函数,然后将传入的对象作为这个构造函数原型,最后返回了这个临时类型的一个新实例. // object()本质上对其中传入的对象进行了一次浅复制 // 看如下的例子: var person = { na

[js高手之路]原型式继承与寄生式继承

一.原型式继承本质其实就是个浅拷贝,以一个对象为模板复制出新的对象 1 function object( o ){ 2 var G = function(){}; 3 G.prototype = o; 4 return new G(); 5 } 6 var obj = { 7 name : 'ghostwu', 8 age : 22, 9 show : function(){ 10 return this.name + ',' + this.age; 11 } 12 }; 13 var obj2

原型式继承

原型式继承是道格拉斯·克罗克福德在 2006年写了一篇文章,题为 Prototypal Inheritance in JavaScript (JavaScript 中的原型式继承)中指出的.他给出了一下函数 function object(o){ function f(){} f.prototype = o; return new f(); } 然后再创建一个临时性的构造函数,再讲构造函数传入object()中 这种原型式的继承,必须要有一个对象(person)作为另一个对象的基础,然后再根据需