js对象4-js原型--杂志

提问:在js中什么是原型 prototype

每个学js的人都有自己的解释,网上一大堆的解释与应用,但是看了他们的解释表示还是不理解怎么办?(原因是他们说的太天花乱坠了)

官方手册解释:prototype 属性使您有能力向对象添加属性和方法。

  1.prototype是对象的一个属性

  2.使用它可以给对象添加方法

小龙哥来解释:解释前还是来看一个非常简单的案例

先来讨论一下css(做前端的都会这个--简单吧)

当我们给元素添加样式的时候经常的方式是不是

  1.使用 class   (改变一类元素的样式)

  2.使用行间样式    (给单个元素改变样式)  (给单个对象添加方法

.box1 { background: red}
<div>
    <div style=‘background: red‘ class=‘box1‘></div>
    <div class=‘box2‘></div>
    <div class=‘box2‘></div>
    <div class=‘box2‘></div>
    <div class=‘box2‘></div>
</div>

还记得上一章中的这个案例  只能给单个的数组对象求和 (类似于css行间样式)

 1 var arr1 = new Array(22,44,1,6,7);   //也可以使用直接量创建    var arr1 = [22,44,1,6,7];
 2     arr1.sum = function(){    //给数组arr1添加一个方法sum   (类似于css行间样式)
 3         var result = 0  //求和
 4         var i = 0;   //一个小的性能优化 不用每次for循环的时候都声明并初始化一个变量 i = 0
 5         for(i = 0; i<this.length; i++){    //this 代表调用函数的对象为arr1
 6             result+= this[i];
 7         }
 8         return result;
 9     }
10     alert(arr1.sum());   //80

给Array类的原型上添加一个方法.你有多少个数组都可以给这些数组求和  类似于css中的class

var arr1 = new Array(22,44,1,6,7);   //也可以使用直接量创建    var arr1 = [22,44,1,6,7];
var arr2 = new Array(1,24,5,6);
    Array.prototype.sum = function(){    //给Array类的原型上添加一个方法sum
        var result = 0  //求和
        var i = 0;   //一个小的性能优化 不用每次for循环的时候都声明并初始化一个变量 i = 0
        for(i = 0; i<this.length; i++){    //this 代表调用函数的对象为arr1
            result+= this[i];
        }
        return result;
    }
    alert(arr1.sum());   //80
    alert(arr2.sum());   //36
    alert(arr1.sum == arr2.sum )    //true  因为他们都是来自同一个原型上的方法   解决浪费

简单的总结:给一个类的原型上添加一个方法,那么通过这个类创建出来的对象都可以使用这个方法

1.使用 class   (改变一类元素的样式)     (类似于:在类的原型上添加方法

2.使用行间样式    (给单个元素改变样式)  (给单个对象添加方法

现在可以给前面的实例填上原型

<script type="text/javascript">
    function CreatePreason(name,sex){   //构造函数
        //假想系统内部自动构造出一个对象,这个对象赋值给了this
         //var this = new Object();
              //属性   
       this.name = name;  //给对象添加一个name属性
       this.sex = sex;  //给对象添加一个sex属性

           //假想系统内部自动返回了
          // return this;
    }
  //方法
CreatePreason.prototype.sayName= function(){
        alert("大家好我是:"+this.name);   // 打印出:传进来的参数name的真正值           这里的this代表调用该方法的对象
 }

CreatePreason.prototype.saySex= function(){
        alert("性别:"+this.sex);   // 打印出:传进来的参数sex的真正值           这里的this代表调用该方法的对象
}

    var p1 = new CreatePreason("小龙哥","男");
    var p2 =new CreatePreason("小龙女","女");
    p1.sayName();  //打印出  大家好我是:小龙哥
    p1.saySex();   //打印出  性别:男
    p2.sayName();  //打印出  大家好我是:小龙女
    p2.saySex();   //打印出  性别:女
    alert(  p1.sayName ==   p2.sayName)  //true
</script>

总结:1.构造函数名首字母大写

   2.在构造函数里面添加属性(不相同的添加到构造函数里面)

   3.在构造函数的原型prototype上添加方法  (相同的添加到原型上)

   4.以后要是想不起来原型是干嘛的,就想想css吧

讨论原型与单个对象的优先级

Array.prototype.a = 12 //原型上添加类似于class
var arr1 = [1,33,4,77];
alert(arr1.a) //12

arr1.a = 5;
alert(arr1.a) //5 //单个对象上添加 类似于行间样式

在css中行间样式的优先级大于class的优先级

时间: 2024-08-01 10:45:34

js对象4-js原型--杂志的相关文章

JS对象中的原型

对象的原型:每个对象都连接一个原型对象,并且它可以从中继承属性.所有通过对象字面量创建的对象都连接到object.prototype.当你创建一个新对象时,你可以选择某个对象作为它的原型.原型连接在更新时不起作用.当我们对某个对象作出改变时,不会触及该对象的原型.原型连接只有在检索值的时候才被用到.如果我们尝试去获取对象的某个属性值,但该对象没有此属性名,那么JS会试着从原型对象中获取属性值,如果那个原型对象也没有该属性,那么再从它的原型中找,以此类推,直到该过程最后到达终点Object.pro

JS对象继承与原型链

1.以复制方式实现的继承 1.1浅拷贝 基本类型的复制 1 var parent = { 2 lanage: "chinese" 3 } 4 5 var child = { 6 name: "xxx", 7 age: 12 8 } 9 10 function extend(parent, child) { 11 var child = child || {}; 12 for (const propertype in parent) { 13 child[proper

创建js对象和js类

//第一种定义方式 var person=new Object(); //创建了一个对象. person.name="tom"; //使用person对象对调用name属性,它的值为tom alert(person.name); //显示name属性值 person.say=function(){ //对person对象添加了一个say函数. alert("person say"); }; person.say(); //第二种定义方式 var person={ n

JSON转JS对象,JS对象转JSON

一.从服务端发来的json字符串,怎么才能作为JavaScript对象(JSON对象)在web端调用呢? 1.如果使用jQuery,就很方便了,可以在ajax一系列函数中,把参数Datatype传json即可,返回的data即为JSON对象. PS:如果要对表单处理为json字符串,可以使用.serialize()与.serializeArray()处理,如果要作为URL调用,则可以使用jQuery.param()处理. 2.$.parseJSON( jsonstr) 3.浏览器自带的JSON.

JS 对象之继承

<!-- ————————JS对象之继承 ———————— --> //父类 function Sup(name){ this.name=name; } //父类的原型 Sup.prototype={ constructor:Sup, sayName:function(){ alert(this.name); } }; //子类构造函数 function Sub(age){ this.age=age; } //让子类的原型等于父类的实例 Sub.prototype=new Sup("

JS对象之间的关系

JS对象类型 JS中,可以将对象分为"内部对象"."宿主对象"和"自定义对象"三种. 1.本地对象 ECMA-262定义为"独立于宿主环境的JS实现提供的对象".简单来说,本地对象就是JS定义的类(引用类型).它们包括: Object/Function/Array/String/Boolean/Number/Date/RegExp/Error/ EvalError/RangeError/ReferenceError/Synta

多个jsp页面共享一个js对象

今天,在项目中遇到一个问题,两个js页面要共享一个就js对象.js全局变量和静态变量都不行,其他苦逼的小农们就不要去强求了.而LZ又不想用cookie来存放,一是不安全,二个人喜好.最后发现一种超级方法来解决这个困扰,那就是用window.top['_CACHE']来存放这个变量,即可实现,不同Jsp页面直接的对象共享. var share = { /** * 跨框架数据共享接口 * @param {String} 存储的数据名 * @param {Any} 将要存储的任意数据(无此项则返回被查

js:对象的创建(基于组合和动态原型)

基于原型的创建虽然可以有效地完成封装,但是依然存在如下问题: 1.无法通过构造函数来设置属性值 2.当属性中有引用类型变量时,可能存在变量值重复 function Person(){ } Person.prototype = { constructor:Person, name:"Leon", age:30, friends:["Ada","Chris"], say:function(){ alert(this.name+"["

JS基础:基于原型的对象系统

简介: 仅从设计模式的角度讲,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过这个类来创建对象,例如传统的面向对象编程语言 "C++"."Java" 等:另一种方式是,我们不需要关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象,就像所有吸血鬼故事必然有一个吸血鬼祖先一样,在 "Javascript" 世界中 "Object" 对象就是这个吸血鬼祖先,所有其他对象都是继承自 "Ob