简单原型语法和原型动态性

一、简单原型语法

            function Student(){

            }
            Student.prototype={
                name:‘yjj‘,
                age:15,
                myName:function (){
                    alert(this.name);    

                }
            }
        //简单原型写法本质上完全重写了默认的prototype对象,因此construtor属性也就变成了新对象的constructor属性,指向了object构造函数,不再指向Student函数。
        //通过constructor已经无法确定对象类型了
        var student = new Student();
        alert(student instanceof Object);//true
        alert(student instanceof Student);//true
        alert(student.constructor==Student);//false
        alert(student.constructor==Object);//true 

如果constructor的值很重要,可以设置回来。

        function Student(){

            }
            Student.prototype={
                constructor:Student,
                name:‘yjj‘,
                age:15,
                myName:function (){
                    alert(this.name);    

                }
            }
         var student = new Student();
        alert(student instanceof Object);//true
        alert(student instanceof Student);//true
        alert(student.constructor==Student);//true
        alert(student.constructor==Object);//false

注意constructor属性默认是不可枚举的,但这样设置后就可以枚举了。

二、原型的动态性

可以先创建出对象,然后再对原型添加属性,之后还是能获取到原型添加的属性。

 function Student(){

         }
      var student = new Student();
      Student.prototype.myName=function (){
        alert(‘yjj‘);
      }
      student.myName();//输出yjj

注意和简单原型语法一起使用时:

function Student(){

         }
      var student = new Student();

      Student.prototype={
                constructor:Student,
                name:‘yjj‘,
                age:15,
                myName:function (){
                    alert(this.name);    

                }
       }
       student.myName();//错误 

简单原型写法 重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的联系,它们仍然引用的是最初的原型。

时间: 2024-08-30 05:24:39

简单原型语法和原型动态性的相关文章

JS高级---原型的简单的语法

原型的简单的语法 构造函数,通过原型添加方法,以下语法,手动修改构造器的指向 实例化对象,并初始化,调用方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>title</title> <script> function Student(name, age, sex) { this.name

简单理解javascript的原型prototype

原型和闭包是Js语言的难点,此文主要讲原型. 每一个方法都有一个属性是 prototype 每一个对象都有一个属性是 _proto_ 一旦定义了原型属性或原型方法,则所有通过该构造函数实例化出来的所有对象,都继承了这些原型属性和原型方法,这是通过内部的_proto_链来实现的. /* Js所有的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型.这个函数包括构造函数和普通函数,我们讲的更多是构造函数的原型,但是也不能否定普通函数也有原型. 每一个方法都有一个属性叫

Js 原型对象与原型链

原型对象 每个javascript对象都有一个原型对象,这个对象在不同的解释器下的实现不同.比如在firefox下, 每个对象都有一个隐藏的__proto__属性,这个属性就是"原型对象"的引用. 原型链 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自 己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本 身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则

一个例子让你明白原型对象和原型链

开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述.有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解.最近正在读<Javascript高级程序设计>,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明. 我们经常会这么写 function Person () { this.name = 'John'; } var person = new Person(

[Effective JavaScript 笔记]第44条:使用null原型以防止原型污染

第43条中讲到的就算是用了Object的直接实例,也无法完全避免,Object.prototype对象修改,造成的原型污染.防止原型污染最简单的方式之一就是不使用原型.在ES5之前,并没有标准的方式创建一个空原型的新对象. 尝试 设置构造函数的原型属性为null或undefined function C(){} C.prototype=null; 结果 实例化该构造函数仍然得到是Object的实例. var c=new C(); Object.getPrototypeOf(c) === null

JavaScript 原型对象和原型链

开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述.有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解.最近正在读<Javascript高级程序设计>,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明. 我们经常会这么写 1 function Person () { 2 this.name = 'John'; 3 } 4 var person = new

(转)认识原型对象和原型链

在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象 Object 和 函数对象 Function. 一般而言,通过 new Function 产生的对象是函数对象,其他对象都是普通对象. 举例说明: function f1() { // todo } var f2 = function () { // todo }; var f3 = new Function('x', 'console.log(x)'); var o1 = {}; var o2 = new O

使用AxureRP7.0制作经典数独小游戏原型,axure游戏原型下载

之前,有同学在Q群中提问,如何使用axure制作经典数独解谜小游戏,当时由于时间关系没有来得及亲手制作,而是给同学们提供了Axure6.5版本的一个数独解谜游戏的原型,本教程由axure原型库网站录制,转载请注明出处!但是那个原型做的太过繁杂,所以仅供大家参考交流:在此,金乌老师特地抽时间给同学们使用AxureRP7.0制作了一下,感觉对实战逻辑分析和axure变量的掌握比较有考验,所以就放出来供大家学习交流使用. 在学习的过程中,如果你仅凭自己现有的对axure的掌握,无法准确分析并组织出原型

[js高手之路]一步步图解javascript的原型(prototype)对象,原型链

我们接着上文继续,我们通过原型方式,解决了多个实例的方法共享问题,接下来,我们就来搞清楚原型(prototype),原型链的来龙去脉. function CreateObj(uName) {             this.userName = uName;         }         CreateObj.prototype.showUserName = function(){             return this.userName;         }         va