JavaScript的原型

//回顾构造函数
function Box(name, age) {
        this.name = name;                 //实例属性
        this.age = age;
        this.run = function() {           //实例方法
            return this.name + this.age;
        }
    }

  

//原型
        function Box() {}                   //构造函数体内什么都没有,如果有就是实例属性或者实例方法
        Box.prototype.name = ‘Lee‘;         //原型属性
        Box.prototype.age = 100;            //原型属性
        Box.prototype.run = function () {   //原型方法
            return this.name + this.age;
        };
        var box1 = new Box();
        var box2 = new Box();
        alert(box1.name);                   //Lee
        alert(box1.age);                    //100
        alert(box1.run());                  //run是一个方法,run()是一个值

  

        function Box() {}                   //构造函数体内什么都没有,如果有就是实例属性或者实例方法
        Box.prototype.name = ‘Lee‘;         //原型属性
        Box.prototype.age = 100;            //原型属性
        Box.prototype.run = function () {   //原型方法
            return this.name + this.age;
        };
        var box1 = new Box();
        var box2 = new Box();

        //原型属性和实例属性的区别是共享,共享保持一致,
        //如果是实例方法,不同的实例化,他们的方法地址是唯一的不一样的
        //如果是原型方法,那么他们的地址是共享的,大家都一样
        alert(box1.run == box2.run);        //true,说明是地址共享的。
        alert(box1.__proto__);              //访问的是一个指针,指向prototype原型对象
        alert(box1.constructor);            //构造属性,可以获取构造函数本身
                                            //作用是被原型指针定位,,然后得到构造函数本身
                                              //其实就是对象实例对应的原型对象的作用
                                              //IE浏览器不能访问,但是别的浏览器虽然能访问却不能获取内部信息
                                              //返回的是[object,object];

  

删除实例中的属性
delete box1.name;                   //删除实例中的属性
        alert(box1.name);           //Lee,本来是jack,因为实例中的属性删除了所以为Lee;

  

覆盖原型中的属性
 Box.prototype.name = ‘LLL‘;         //覆盖原型中的属性;
        alert(box1.name);            //LLL覆盖原型中的属性;

  

hasOwnProperty()判断属性是在实例中
alert(box1.hasOwnProperty(‘name‘));     //false;说明属性不在实例中
        box1.name = ‘j‘;
        alert(box1.hasOwnProperty(‘name‘));//true;说明属性在实例中

  判断只有在原型中的属性

//只有原型中的属性
        function isProperty(object, protety) {
           return !object.hasOwnProperty(protety) && (protety in object)
        }
        alert(isProperty(box1, ‘name‘));//true,此刻就原型中有属性name,所以是true,如果
                                        //把原型中的name删除,那么就是false
        box1.name = ‘hello‘;
        alert(isProperty(box1, ‘name‘));//false,因为isProperty这个函数是判断原型中是否有name
                                        //属性,此刻实例中给了box1的一个name属性

  有错误希望能帮我提出来,我会改正

时间: 2024-10-01 04:41:10

JavaScript的原型的相关文章

javascript简单原型

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

史上最清晰的JavaScript的原型讲解

一说起JavaScript就要谈的几个问题,原型就是其中的一个.说了句大话,史上最清晰.本来是想按照大纲式的行文写一下,但写到后边感觉其实就一个概念,没有什么条理性,所以下面就简单按照概念解释的模式谈下这个问题. 1.JavaScript的原型是什么? 原型,首先他是个对象.和在以对象为核心的JavaScript这门语言中的其他普通对象来说一样,只不过他的角色有点特殊.但首先要明白他就是一个对象,是一个无序的属性和值的序列对. 2.谁会具有原型这个对象? 所有的对象(包括函数这个对象)在默认的情

深刻理解JavaScript基于原型的面向对象

主题一.原型 一.基于原型的语言的特点 1 只有对象,没有类;对象继承对象,而不是类继承类. 2  "原型对象"是基于原型语言的核心概念.原型对象是新对象的模板,它将自身的属性共享给新对象.一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性. 3 除了语言原生的顶级对象,每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统.root节点的顶层对象是一个语言原生的对象,其他所有对象都直接或间接继承它的属性. 显然,基于原型的语言比基于类的语言简单得多,我

理解JavaScript 的原型属性

1.原型继承 面向对象编程可以通过很多途径实现.其他的语言,比如 Java,使用基于类的模型实现: 类及对象实例区别对待.但在 JavaScript 中没有类的概念,取而代之的是一切皆对象.JavaScript 中的继承通过原型继承实现:一个对象直接从另一对象继承.对象中包含其继承体系中祖先的引用——对象的 prototype 属性. 2. JavaScript 实现继承的语言特性 当尝试访问 JavaScript 对象中不存在的属性时,解析器会查找匹配的对象原型.例如调用 car.toStri

javascript数组原型方法

1.javascript数组原型方法. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>jstest</title> 6 </head> 7 <body> 8 <script> 9 var arr = ["1","2&q

JavaScript的原型继承

JavaScript是一门面向对象的语言.在JavaScript中有一句很经典的话,万物皆对象.既然是面向对象的,那就有面向对象的三大特征:封装.继承.多态.这里讲的是JavaScript的继承,其他两个容后再讲. JavaScript的继承和C++的继承不大一样,C++的继承是基于类的,而JavaScript的继承是基于原型的. 现在问题来了. 原型是什么? 原型我们可以参照C++里的类,同样的保存了对象的属性和方法.例如我们写一个简单的对象 function Animal(name) { t

JavaScript对象 原型

javascript对象就是一组数据和功能的集合,除原始类型(string.number.boolean.null.undefined)之外,其余都是对象. 可以通过对象直接量(字面量).new.和Object.create()(ECMAScript5)来创建对象. //new var person = new Object(); person.name = "YuanSong"; person.age = 28; //对象字面量 var person = { name : "

javascript中原型,构造器,还有E5扩展的默认成员

对象原型所具有的基本特征:1.toString() 2.toLocaleString() 3.valueOf() 4.constructor() 5.propertyIsnumerable() 6.hasOwnProperty() 7.isPrototypeOf()构造器所具有的特殊成员1.call() 2.apply() 3.caller() 4.bind() 5.arguments [object] 6.length [number] 7.prototype [objcet] E5对于Obj

JavaScript的原型模式

原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象. http://www.cnblogs.com/TomXu/archive/2012/04/16/2436460.html http://www.cnblogs.com/silymer/archive/2012/11/02/2751803.html JS原型对象:所有实例都会共享它里面的属性和方法 原型(prototype),是 JavaScript 特有的一个概念,通过使用原型,JavaScrip

node.js javascript理解原型继承

util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承的函数. JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同.JavaScript 没有提供对象继承的语言级别特性,而是通过原型复制来实现的 var util = require('util'); function Base() { this.name = 'base'; this.base = 1991; this.sayHello =