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属性
有错误希望能帮我提出来,我会改正
JavaScript的原型的更多相关文章
- Javascript的原型链图
90%的前端或者js程序员或者老师们对Javascript懂得不比这个多 给手机看的 但是这个图里的所有褐色单向箭头链就是Javascript的原型链(颜色标注对理解js原型链很关键) 这图中的各个_ ...
- 深入理解JavaScript系列:史上最清晰的JavaScript的原型讲解
一说起JavaScript就要谈的几个问题,原型就是其中的一个.说了句大话,史上最清晰.本来是想按照大纲式的行文写一下,但写到后边感觉其实就一个概念,没有什么条理性,所以下面就简单按照概念解释的模式谈 ...
- 【面试必备】javascript的原型和继承
原型.闭包.作用域等知识可以说是js中面试必考的东西,通过你理解的深度也就能衡量出你基本功是否扎实.今天来复习一下javascript的原型和继承,虽说是老生常谈的话题,但对于这些知识,自己亲手写一遍 ...
- javascript进阶-原型prototype
一.javascript原型认识 很多编程语言都有类的概念,我们可以拿原型和类进行比较,看看它们之间的区别以及相同点在哪里. 1.类:类是一个具体事物的抽象所以类是一个抽象的东西,在面向对象中类可以用 ...
- 理解JavaScript 的原型属性
1.原型继承 面向对象编程可以通过很多途径实现.其他的语言,比如 Java,使用基于类的模型实现: 类及对象实例区别对待.但在 JavaScript 中没有类的概念,取而代之的是一切皆对象.JavaS ...
- JavaScript - 基于原型的面向对象
JavaScript - 基于原型的面向对象 1. 引言 JavaScript 是一种基于原型的面向对象语言,而不是基于类的!!! 基于类的面向对象语言,比如 Java,是构建在两个不同实体的概念之上 ...
- JavaScript的原型继承
JavaScript是一门面向对象的语言.在JavaScript中有一句很经典的话,万物皆对象.既然是面向对象的,那就有面向对象的三大特征:封装.继承.多态.这里讲的是JavaScript的继承,其他 ...
- javaScript系列 [04]-javaScript的原型链
[04]-javaScript的原型链 本文旨在花很少的篇幅讲清楚JavaScript语言中的原型链结构,很多朋友认为JavaScript中的原型链复杂难懂,其实不然,它们就像树上的一串猴子. 1.1 ...
- JavaScript prototype原型和原型链详解
用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了, ...
- Javascript的原型继承,说清楚
一直以来对Javascript的原型.原型链.继承等东西都只是会用和了解,但没有深入去理解这门语言关于继承这方面的本质和特点.闲暇之余做的理解和总结,欢迎各位朋友一起讨论. 本文本主要从两段代码的区别 ...
随机推荐
- 利用JPEGImageEncoder进行简单的图片压缩
import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.i ...
- (导航控制器view)全屏幕滑动实现pop效果
看到现在app 中越来越流行的手势滑动实现pop效果,心里很是痒痒跃跃欲试,经过多方查看资料,终于在简书上找到了详细的实现方案: 轻松学习之二——iOS利用Runtime自定义控制器POP手势动画 经 ...
- Git学习笔记:Git基础
一.Git与其他版本控制系统的差别 Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异.这类系统每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容.如下图,其他 ...
- ado.net实现一个通知公告功能
一.建立相应的数据库,此处就不多说了,相信大家都非常了解
- fdisk -l 找不到分区怎么办?想办法找到隐藏分区。
centos6.6 装系统的时候,选取系统默认分区.装好后发现少了一大部分空间,通过fdisk -l 找不到分区,另外使用 parted -l 同样找不到消失的柱面. 如: [root@mysql]# ...
- Leetcode 100 Same Tree python
题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...
- C++ 包含头文件 和 宏的使用 和 条件编译
1 #define命令剖析 1.1 #define的概念 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. ...
- UVA 11889 Benefit
题意: lcm(a, b) = c; c是a,b的最小共倍数, 现在给出a, c, 要你求出最小的b. 解题思路: 1. 如果c%a != 0 表示无解. 设b = c/a; 当gcd ...
- 去掉ExpandableListView的箭头图标
到ExpandableListView时有个箭头图标系统自带的在你自定义布局也不能去掉只要设置一个属性即可,如下: settingLists.setGroupIndicator(null); ~~~ ...
- adb 异常报错----adb server is out of date. killing... ADB server didn't ACK * failed to start daemon *
在Eclipse进行android开发的时候,由于要启动adb,但有时候其他的程序启动会占用adb程序的端口,这时候在对android程序进行调试的时候就会出现报错: 究其原因就是因为其他程序占用了a ...