`
诸葛蛋疼
  • 浏览: 37351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

prototype内部方法跟原型创建方法的一些区别

阅读更多
1、
prototype是与Clone联系起来的,
也就是说,当创建实例时,prototype会把成员clone到该Class(function)的实例上。
Detail: 最常见的几个内置内对象里的prototype,如:Array原型有join, split方法,
当创建数组a时var a=[1,2],原型里的所有方法都被clone到a上。

2、this是该类的实例指针(该指针为"动态联编")。如何理解js this的动态联编
当创建该类实例时,实例具有预先定义的所有以this.p类似的成员。也具有prototype原型里定义的成员,如果类内部定义与prototype里的一个定义相同,则不是重写:

看这个例子,jsclass定义的this.func,还有prototype里定义的func,如果jsclass内部有成员与原型里的相同,实例化时优先权为this.func,但注意,原型里并不是重写func,而是jsclass实例共有的,虽然其优先权没有this.func高,与此同时,我们也可以以这种方式来理解prototype与类内部定义成员:
<script>
function jsclass() {
     this.p = "never-online";
     this.func = function () {
       alert('func');
     }
}
jsclass.prototype = {
     func : function () {
     alert(this.p);
     }
}
var a = new jsclass();
a.func();
delete a.func;
a.func();
</script>
我们再把上面的代码修改一下。这样看: <script>
function jsclass() {
     this.p = "never-online";
     this.func = function () {
       alert('func');
     }
}
jsclass.prototype = {
     func : function () {
     alert(this.p?this.p:'no value');
     }
}
var a = new jsclass();
a.func();//调用内部成员
delete a.func;//此处删除是的类内部定义的func
a.func();//调用prototype成员
delete a.func;//试图再次删除func(prototype)
a.func();//删除无效(内部的func已经被删除),依然可打印输出
</script>
注释:类内部的成员可以用delete删除,而原型里定义的,则不能用delete 实例名.成员名来删除的。
如果用prototype定义后,实例化时:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
也就是在上面的 delete a.func;//此处删除是的类内部定义的func
a.func();//调用prototype成员之后,再次调用a.func(),调用时,通过调用prototype.func来实现的。而并非a.func(),这也解释了为什么在jsclass内部定义func与在prototype定义func时不会有重写现象。
分享到:
评论

相关推荐

    Prototype模式

    **原型模式(Prototype Pattern)**是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过构造函数。在某些情况下,当创建新对象的成本非常高时(例如,对象需要大量的初始化操作或者从...

    创建型模式之原型模式(Prototype Pattern)

    在实际应用中,用户通常无需关心具体原型的实现细节,只需调用其克隆方法即可创建新对象。 1. **浅拷贝与深拷贝** - 浅拷贝:只复制对象本身,而不复制它引用的对象。如果原型对象引用了其他对象,浅拷贝后的对象...

    原型模式prototype

    **原型模式(Prototype)**是软件设计模式中的一种,它属于创建型模式,主要用于简化对象的创建过程,通过复制已有对象来生成新对象,避免了重复的构造过程,提高了代码的效率和可维护性。在Java、C#等面向对象语言...

    [创建型模式]设计模之原型模式(Prototype Pattern)

    **原型模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数或工厂方法。这种模式的核心在于,它提供了一种更高效、更灵活的方式来创建新实例,特别是在...

    javascript prototype原型操作笔记.docx

    每个 JavaScript 对象都有一个内部属性 `[[Prototype]]`,它链接到另一个对象,即原型对象。当我们尝试访问一个对象的属性或者方法时,如果该对象自身不包含此属性或方法,则会沿着原型链向上查找,直到找到该属性或...

    原型模式实践代码

    `clone()`方法会创建与当前对象具有相同属性的新对象,这是浅拷贝,如果对象内部有引用类型,只复制引用,不复制引用的对象。深拷贝则需要自定义实现,确保所有引用的对象也被复制。 描述中提到的"原型模式实践代码...

    JavaScript中的prototype(原型)属性研究

    当我们创建一个函数实例时,实例会自动获取一个内部属性[[Prototype]],这个属性通常通过`__proto__`或者`Object.getPrototypeOf`方法访问,它引用的就是函数的prototype属性所指向的对象。 ### prototype的用途 1....

    原型模式(ProtoType)C#应用案例

    原型模式(Prototype)是一种软件设计模式,主要用于简化创建对象的过程,尤其当对象的构造过程复杂时。在C#中,我们可以利用接口或者继承来实现这一模式。本案例将深入探讨如何在C#环境中运用原型模式。 首先,...

    js中使用使用原型(prototype)定义方法的好处详解

    首先,原型为JavaScript中的函数提供了一个属性——prototype,这个属性指向了一个原型对象,所有的通过该构造函数创建的实例都可以访问到原型对象上的属性和方法。这种方法的好处之一就是节省内存。当我们通过构造...

    C#视频-面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式)

    在本课程中,我们将深入探讨C#编程中的一个重要设计模式——Prototype原型模式,它是创建型设计模式的一种。原型模式主要用于简化实例化过程,通过复制已有对象来创建新对象,而不是直接通过构造函数来创建。这一...

    设计模式C++学习之原型模式(Prototype)

    在Demo20_Prototype中,我们可以看到具体的原型模式实现示例,它可能包含了不同类型的原型对象以及如何通过克隆接口创建新对象的代码。这个例子将帮助我们更好地理解和应用原型模式,提高编程效率和代码质量。 总结...

    prototype

    1. **原型对象(Prototype Object)**:每个函数在JavaScript中都内置了一个`prototype`属性,这个属性是一个对象,用于定义将来由该函数创建的对象的实例的属性和方法。 2. **原型链(Prototype Chain)**:当试图...

    prototype文件以及使用说明.rar

    `__proto__`是旧版浏览器对`[[Prototype]]`的非标准实现,而`Object.create()`是ES5引入的标准方法,用于创建一个新对象并设置其`[[Prototype]]`为指定的对象。 6. **`hasOwnProperty()`和`isPrototypeOf()`** 当...

    浅谈js构造函数的方法与原型prototype

    使用原型链的一个好处是,我们可以在原型对象上定义方法,这样所有通过该原型创建的对象实例都能共享这些方法。这样,无论创建多少对象实例,方法都只会在内存中保留一份拷贝,从而有效减少了内存的使用。使用原型...

    Prototype学习笔记(一)(二)

    在Prototype学习笔记(一)中,可能涉及了如何创建和修改对象的原型,以及如何利用原型链实现属性的继承。笔记可能详细解释了`Object.create()`的用法,该方法可以接受一个对象作为参数,创建一个新的对象并将其`__...

    JS利用prototype给类添加方法操作详解

    3. 调用`new`关键字创建实例,实例将继承构造函数`prototype`上的所有方法。 这种机制使得JavaScript能够有效地处理大量的对象实例,同时保持内存使用量的最小化。了解并熟练运用`prototype`是JavaScript开发中的一...

    JS原型对象的创建方法详解

    JavaScript中的原型对象是实现继承和共享属性的一种机制。在JavaScript中,每个函数都有一个prototype属性,这个属性是一个...在实际开发中,应根据项目需求选择合适的原型创建策略,同时关注代码的可读性和维护性。

    prototype学习笔记

    `__proto__`是对象内部的一个引用,它指向创建该对象的构造函数的`prototype`。而`Object.prototype`是最基础的原型对象,所有其他对象都直接或间接地继承自它。 接下来,`prototype`上的方法可以被所有实例共享,...

    设计模式——原型模式

    原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...

    强大的原型和原型链

    在 JavaScript 中,每一个对象都有一个特殊的属性——`__proto__`(内部属性),这个属性链接到另一个对象,也就是该对象的原型对象。当试图访问一个对象上的属性或方法时,如果对象本身没有这个属性或方法,...

Global site tag (gtag.js) - Google Analytics