function Box(){

}

//使用字面量的方式创建原型对象,这里{}就是对象,是Object, new Object相当于{}

         Box.prototype = {
name:"lee",
age:25,
run:function(){
return this.name + this.age + "运行中...";
}
} Box.prototype = {
age:26
}
var box1 = new Box(); var a = [8,9,5,4,6,1,2];
alert(a.sort()); alert(Array.prototype.sort);
alert(String.prototype.substring);

2.引用类型本身使用原型,不推荐

 给String 类型添加一个方法
         String.prototype.addstring = function(){
return this + ",被添加了!";
}
var b = "SS";
alert(b.addstring());
原型的特点,原型不能传参数,原型具有共享性,也是原型的缺点
             Box.prototype = {
constructor:Box,
name:'cc',
age:100,
family:['爸爸','妈妈','哥哥'],
run:function(){
return this.name + this.age + this.family;
}
}; var box1 = new Box();
alert(box1.run()); //返回“cc100 爸爸 妈妈 哥哥”
box1.family.push('姐姐');//返回“cc100 爸爸 妈妈 哥哥 姐姐”
alert(box1.run()); var box2 = new Box(); //返回“cc100 爸爸 妈妈 哥哥 姐姐”
alert(box2.run());
//为了解决构造传参合共享问题,可以组合构造函数+原型模式:
       function Box(name,age){
this.name = name;
this.age = age;
this.family = ["父亲","母亲", "妹妹"];
}; Box.prototype = {
constructor:Box,
run:function(){
return this.name + this.age + this.family;
}
} var box3 = new Box();
alert(box3.run("cc",25)); //cc25父亲母亲妹妹
box3.family.push("哥哥");
alert(box3.run("cc",25)); //cc25父亲母亲妹妹哥哥 var box4 = new Box()
alert(box4.run("ll",58)); //ll58父亲母亲妹妹
以上方式解决了传参和共享的问题

上面的书写方式(构造函数+原型)的写法觉得十分怪异,最好是把它们封装在一起。为了解决这个问题,可以使用动态原型模式:

function Box(name,age){
  this.name = name;
  this.age = age;   if (typeof this.run !='function') { //只在第一次调用时初始化
    Box.prototype.run= function() {
    return this.name + this.age + "正在运行中...";
   };
  }; } var box5 = new Box("cc",88);
alert(box5.run());

ps:使用动态原型模式,要注意一点,不可以再使用字面量的方式重写原型,因为会切断实例和新原型直接的联系。

JS:原型的更多相关文章

  1. JS原型链

    JS作为发展了多年了对象语言,支持继承,和完全面向对象语言不同的是,JS依赖原型链来实现对象的继承. 首先JS的对象分两大类,函数对象和普通对象,每个对象均内置__proto__属性,在不人为赋值__ ...

  2. 深入分析JS原型链以及为什么不能在原型链上使用对象

    在刚刚接触JS原型链的时候都会接触到一个熟悉的名词:prototype:如果你曾经深入过prototype,你会接触到另一个名词:__proto__(注意:两边各有两条下划线,不是一条).以下将会围绕 ...

  3. 【09-23】js原型继承学习笔记

    js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...

  4. js原型

    1.js基本类型和对象类型 js的简单类型包括数字(其中NaN为数字类型).字符串(类似'A'为字符,js没字符类型).布尔值.null值和undefined值.其他所有的值都是对象.数字.字符串和布 ...

  5. js原型链与继承(初体验)

    js原型链与继承是js中的重点,所以我们通过以下三个例子来进行详细的讲解. 首先定义一个对象obj,该对象的原型为obj._proto_,我们可以用ES5中的getPrototypeOf这一方法来查询 ...

  6. JS 原型链图形详解

    JS原型链 这篇文章是「深入ECMA-262-3」系列的一个概览和摘要.每个部分都包含了对应章节的链接,所以你可以阅读它们以便对其有更深的理解. 对象 ECMAScript做为一个高度抽象的面向对象语 ...

  7. js原型解析

    我们都知道javascript因为具有了继承以及变量等等一系列的特性之后才被人们认为具有一门编程语言的资格,在后续的不断发展中,js在原生的基础上扩展了基于jquery等等的库,甚至衍生了像node. ...

  8. 深入理解JS原型链与继承

    我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...

  9. 学习zepto.js(原型方法)

    学习zepto.js(原型方法)[1] 转载 新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): ...

  10. js原型链部分详细使用说明案例

    1. 'index.html'文件 ```html <!DOCTYPE html> <html lang="en"> <head> <me ...

随机推荐

  1. 【openGL】画正弦函数图像

    #include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...

  2. 声明replicated属性之后我编译不通过的问题

  3. HDU2205 又见回文(区间DP)

    题意:给定两个字符串(可能为空串),求这两个串交叉组成新串的子串中的回文串的最大长度. 布尔型变量dp[i][j][k][l]表示串a从i到j,b从k到l能否组成新串,初始化为false,则采取区间动 ...

  4. hdu 4061 福州赛区网络赛A 数学 ***

    a1/sum #include<cstdio> #include<iostream> #include<algorithm> #include<cstring ...

  5. fatal error C1083: 无法打开包括文件:“stddef.h”: No such file or directory

      在VS2012安装吗目录下的这个文件夹 D:\Program Files\Visual Studio 2012\VC\include 找到了stddef.h文件,将其加到项目的包含目录中,OK. ...

  6. ICP 算法步骤

    The Iterative Closest Point (ICP) is an algorithm employed to match two surface representations, suc ...

  7. Ubuntu 安装OpenCV3.0.0

    Ubuntu安装OpenCV3.0.0 为了看看opencv3.0的HDR效果,尝试安装opencv3.0到ubuntu12.04上面,安装了好几次终于成功了. 参考博客: http://www.sa ...

  8. 【转】Spark-Sql版本升级对应的新特性汇总

    Spark-Sql版本升级对应的新特性汇总 SparkSQL的前身是Shark.由于Shark自身的不完善,2014年6月1日Reynold Xin宣布:停止对Shark的开发.SparkSQL抛弃原 ...

  9. nodejs随记03

    文件操作 文件系统的操作 fs.readFile(filename, [options], callback) fs.writeFile(filename, data, [options], call ...

  10. javascript优化--12模式(设计模式)03

    观察者模式 通过创建一个可观察的对象,当发生一个感兴趣的事件时将该事件通告给所有观察者,从而形成松散的耦合 订阅杂志 //发布者对象 var publisher = { subscribers: { ...