简单理解javascript中的原型对象,实现对之间共享属性和行为

javascript中提供了构造函数,能够方便的创建对象。典型的构造函数如下:

function Person(name, age)
{
  this.name = name;
  this.age = age;
  this.say = function () {
    return this.name  + ',' + this.age;;
}

之后就可以用new和构造函数创建多个对象。javascript中,类的不同对象之间,属性和方法都是独立的。什么意思呢?java中类的不同对象之间,成员变量是独立的(每个对象都有自己的存储空间,存储属性值),但是方法是共享的,内存中只有一份。但是javascript中,方法也是一个对象一份。如果复创建了多个对象,那么每个对象中的方法都会在内存中开辟新的空间,这样浪费的空间就比较多。

var p1= new Person('a', 25);
var p2= new Person('b', 22);
alert(p1.say == p2.say);//结果返回的是false,说明方法内存空间也不同

javascript中没有什么static和成员变量之分,如果想在对象之间共享数据或方法,只能借助原型对象,将共享的变量和方法都放在原型对象中。

function User(name,age)
{
    this.name = name;
    this.age = age;
}
User.prototype.addr = 'shenzhen';//在原型中添加属性
User.prototype.show = function(){//在原型中添加方法
    alert(this.name+'|'+this.age);
};
var user1 = new User('ZXC',22);
var user2 = new User('CXZ',21);
alert(user1.show == user2.show);//返回 true 说明show方法是共享的

JS的构造函数都有一个prototype属性,指向它的原型对象(其实就是个普通的JS对象)。通过同一个构造函数创建出来的对象,共享同一个原型对象。原型对象初始化的时候是空的,我们可以在里面自定义任何属性和方法,这些方法和属性都将被该构造函数所创建的对象继承。如果原型发生了变化,那么所有实例都会跟着改变。

时间: 2024-10-05 21:58:01

简单理解javascript中的原型对象,实现对之间共享属性和行为的相关文章

一句话简单理解javascript中的原型对象

通过构造函数F创建的对象实例p 这个对象p的原型对象是 构造函数中prototype属性指向的对象s,这个对象p中也有个非标准的__proto__属性指向构造函数prototype所指向的对象s,所以就有 p.__proto__ === F.prototype;在对象P的原型对象s中有个属性constructor属性,指向的是构造函数本身.如果对象p的原型对象s被重写,那么P的构造函数不再是F,而是Object 例如: 1 function F(){}; 2 var p = new F(); 3

链接:深入理解javascript构造函数和原型对象

链接:深入理解javascript构造函数和原型对象http://www.jb51.net/article/55539.htm

理解JavaScript中的原型

学习JavaScript有一段时间了,感觉原型那块儿又有点混乱了,现在写个笔记整理一下思路. 什么是原型 每创建一个函数,这个函数都会自带一个属性prototype指向一个原型对象,最初这个原型对象只包含一个属性constructor,这是指向我们创建的那个函数的指针.也就是说函数和原型对象分别通过prototype和constructor这两个属性(指针)能找到对方. 我们可以通过fn.prototype.propertyName=value来给原型对象继续添加属性和方法.这些属性和方法区别于

理解javascript中的原型模式

一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点:  1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂模式尽管解决了创建多个相似对象的问题,却没有解决对象识别的问题(返回的是自定义的一个对象o,不明确对象o的类型).  2. 构造函数模式:构造函数的调用和其他oo语言一样,用new操作符来构建一个Person的实例:javascript中的构造函数也是函数(所以也可以直接像普通函数那样直接调用方法名

理解javascript中的原型和原型链

原型 大家都知道,JavaScript 不包含传统的类继承模型,而是使用 prototype 原型模型.代码实现大概是这样子的 ? 1 2 3 4 5 6 7 8 9 10 11 12 function Student(name){  this.name = name; }   var Kimy = new Student("Kimy");   Student.prototype.say = function(){  console.log(this.name + "say&

如何理解JavaScript中的原型和原型链

首先是一张关系图,避免抽象化理解时产生的困难 Function对象 函数对象是JavaScript学习中不可避免的一部分,而且这一部分相对重要且抽象 函数的创建方式有2种: 字面量创建 var foo = function(){ console.log("test"); } new 关键字创建实例对象 //let 函数名 = new Function(“参数列表”,”函数体”); let sum = new Function("num1,num2","re

javascript中的原型对象

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> // 原型 // 构造函数的prototype属性的值 function

简单理解Javascript中的call 和 apply

javascript中面向对像的能力是后来加进来的, 为了兼容性, 所以整出了很多奇特的东西, function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } } function Cat(){ this.name = "Cat"; } var animal = new Animal(); var cat = new Cat(); //通过call或ap

javascript学习(原型对象)

在javascript中,原型对象我是认为还是比较晦涩难懂的. 在js中我们可以认为js是面对对象的,跟java差不多,本人也是java出身.在js中 对象的理解与java等其他强类型的语言是不一样的,所以会造成很多后端人员学习js这一块会觉得难以理解.但是js这种原型的灵活性也会造成很多的问题,在这里推荐大家看本书<javascript语言精粹>,另外在新的ES6中就引入了class的概念,符合这本书的初衷 对js语言进行"取其精华,去其糟粕". 首先 javascrip