起初接触到这个prototype我是拒绝的,我还是花了一部分时间来理解这个东西,算不上精通,有什么问题回复在下面
毕竟我是板砖挨惯了(滑稽);
在我理解看来,prototype不外乎就两个基础的作用:
1.动态的添加类的属性和方法
2.复制原类的内容
我们先来看第一个:
首先来定义一个简单的Person类;
var Person = function(name,age){
//指定该类的属性为参数值
this.name = name;
this.age = age;
//为该类指定一个talk方法
this.talk = function(){
alert("talk");
};
};
下面我们来生成Person 的实例
var zhangsan = new Person("zhangsan",19);
var lisi = new Person("lisi",19);
1
2
这样我们产生了两个Person 的实例,zhangsan 和lisi ,原先Person里有个方法talk,而我们生成实例的时候,该talk会被再次生成一遍,因此这是极其不好的,因为假如我们要产生100个Person 的实例,该talk()就会被创建100次,而这很有可能导致内存溢出。那有没有办法只创建一次talk()呢,答案是有的!就是用prototype!
先来看一段代码:
//照样是定义一个Person的类
var Person = function(name,age){
//指定该类的属性为参数值
this.name = name;
this.age = age;
//我们这里不再为Person设定talk方法
};
};
再次来生成Person 的实例
var zhangsan = new Person("zhangsan",19);
var lisi = new Person("lisi",19);
这里创建完毕后,我们得知,zhangsan和lisi都没有talk的方法,我们现在用prototype给他们加上
Person.prototype.talk = function(){
alert("talk");
};
此时,Person所有的实例都拥有了这个方法
zhangsan.talk();//"talk"
lisi,talk();//"talk"
既然第一种用处搞清楚了,现在来看第二种用处。
所谓第二种用处就是复制原类的内容。
//新建一个类Person2
var Person2 = function(name,age){};
Person2.prototype = new Person();
此时的Person里的内容已经全部拷贝到Person2里面了
分享到:
相关推荐
JavaScript中的原型链(Prototype Chain)是理解面向对象编程在JavaScript中的实现方式的关键概念。原型链是基于原型(Prototype)机制的一种实现,它允许对象继承其他对象的属性和方法。在JavaScript中,每个函数...
### 强大的原型和原型链 #### 前言 JavaScript 的继承机制与传统面向对象语言(如 Java、C#)中的类继承不同,它采用了基于原型(Prototype-based)的继承模型。这种模型使得 JavaScript 在处理对象之间的继承关系...
JavaScript会查找该实例的__proto__,也就是其构造函数的prototype所指向的原型对象,若仍未找到,则会继续往上查找,直到到达原型链的末端(通常是指向Object.prototype的原型对象)。 #### 原型链 原型链是...
JavaScript中的构造函数、`new`操作符和`prototype`属性也与原型链紧密相关。当我们使用`new`关键字调用一个构造函数时,会创建一个新的对象,这个新对象的`[[Prototype]]`被设置为构造函数的`prototype`属性所指向...
原型链的构建通常是通过构造函数的`prototype`属性来实现的。当创建一个新的实例时,它的`__proto__`会被设置为构造函数的`prototype`。例如: ```javascript function Person() {} Person.prototype.name = "John...
原型链污染(Prototype Pollution)是一种安全漏洞,它利用了JavaScript允许修改任何对象的原型这一特性。攻击者可以通过构造特定的输入,修改原型链上的属性,从而影响程序的正常行为,甚至获取敏感信息。例如,...
在JavaScript中,理解原型(Prototype)与原型链(Prototype Chain)是至关重要的。这两个概念是语言的核心部分,对于深入理解对象的属性查找机制、继承等方面有着不可替代的作用。 #### 原型(Prototype) 在...
### JavaScript Prototype原型操作知识点 #### 一、Prototype基础概念 **Prototype** 在 JavaScript 中是一个非常重要的概念,它支持面向对象编程中的继承特性。每个 JavaScript 对象都有一个内部属性 `[...
`[[Prototype]]`是每个JavaScript原生对象内置的原型属性,但不能直接访问,只能在查找原型链时由JavaScript引擎使用。它是JavaScript实现继承的基础。而`prototype`是函数对象的属性,可以直接通过JavaScript访问。...
当访问一个对象的属性或方法时,如果对象本身没有定义该属性或方法,JavaScript 就会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的末尾(null)为止。 原型链图是用于表示 JavaScript 中对象之间原型...
一个例子让你彻底明白原型对象和原型链 开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述。有一句话说的好:如果你不能把一个很复杂...
5. `prototype`的主要作用是实现继承,通过原型链,子类可以访问父类的`prototype`中的属性和方法。 了解这些知识点,有助于深入理解JavaScript中的面向对象编程,以及如何利用原型和原型链实现对象间的属性继承和...
现在,`One`的实例将会有一个原型链,从`One.prototype`到`Two.prototype`,再到`Two.prototype`的`__proto__`(通常是`Object.prototype`)。 总结来说,JavaScript的原型和原型链提供了面向对象编程中的继承机制...
在JavaScript编程中,原型链(Prototype Chain)是理解对象继承机制的关键。原型链污染漏洞是一种安全问题,它允许攻击者通过篡改或注入代码来操纵对象的原型,从而可能导致数据泄漏、逻辑错误甚至完全控制应用程序...
JavaScript中的继承和原型链是其核心特性之一,尤其对于从基于类的语言背景转到JavaScript的开发者来说,理解这一概念至关重要。在JavaScript中,没有传统的类,而是基于对象和原型进行继承。每个对象都有一个指向其...