//本例是为了记录检测对象类型的两种方式,即constructor属性和instanceof操作符。详见《高三》P145
        function Person(name, age, job) {
            this.name = name;
            this.age = age;
            this.job = job;
            this.say = function () {
                alert("hi,i'm " + name + "!");
            }
        }

var person1 = new Person("kitty", 18, "Student");
        var person2 = new Person("wede", 29, "SoftWare");

//利用constructor属性检测对象类型
        alert(person1.constructor == Person);  //true
        alert(person2.constructor == Person);  //true

//利用instanceof操作符检测对象类型
        alert(person1 instanceof Person);  //true
        alert(person2 instanceof Person);  //true

/********************************************************************************/

//利用instanceof操作符同样也能检测到继承自Object基类的所有类型,比如这样:
        alert(person1 instanceof Object); //true
        alert(person2 instanceof Object); //true
        //对比constructor属性,可以看出,constructor属性的值为对象的直接父级
        alert(person1.constructor == Object); //false
        alert(person2.constructor == Object); //false

//本例是上面示例的补充,意在说明函数的重构
        //详见《高三》P147
        function Person(name, age, job) {
            this.name = name;
            this.age = age;
            this.job = job;
            this.say = say; //注意,这里将外部函数say的作用域指向了函数内部
        }

function say() {
            alert("Hello,I'm "+this.name+","+this.age+" years old,i'm a "+this.job);
        }

var person1 = new Person("kitty", 18, "Student");
        var person2 = new Person("wede", 29, "SoftWare");

person1.say();
        person2.say();

检测对象类型的两种方式,constructor属性和instanceof的更多相关文章

  1. Java中对象拷贝的两种方式

    引用的拷贝 //引用拷贝 private static void copyReferenceObject(){ Person p = new Person(23, "zhang") ...

  2. JVM中对象访问定位两种方式

    1.通过句柄方式访问, 在Java堆中分出一块内存进行存储句柄池,这样的话,在栈中存储的是句柄的地址 优点: 当对象移动的时候(垃圾回收的时候移动很普遍),这样值需要改变句柄中的指针,但是栈中的指针不 ...

  3. 对象copy的两种方式--序列化--clone

    对象实现copy有多中方式,最土的方法就是直接new,然后塞值,不过这种方法是真的low,下面着重说说Object类中的clone() 和 序列化反序列化copy Object 中 clone的方法 ...

  4. jdbc插入修改clob类型的两种方式

    方法一: Connection con = dbl.loadConnection(); strSql = "insert into table1(id,a) values (1,EMPTY_ ...

  5. 在javaScript中把非数值类型的数据自动转换为数值类型的两种方式

    一.使用Number()函数. 二.使用parseInt()/parseFloat()函数. 详情: 一.使用Number()函数将非数值类型的数据自动的转化为数组类型 Number()函数可以将任何 ...

  6. java 的对象拷贝(有深浅拷贝两种方式,深拷贝实现的两种方式(逐层实现cloneable接口,序列化的方式来实现))

    Java提高篇--对象克隆(复制)(转自:http://www.cnblogs.com/Qian123/p/5710533.html#_label0)   阅读目录 为什么要克隆? 如何实现克隆 浅克 ...

  7. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

  8. jQuery 获取DOM节点的两种方式

    jQuery中包裹后的DOM对象实际上是一个数组,要获得纯粹的DOM对象可以有两种方式: 1.使用数组索引方式访问,例如: var dom = $(dom)[0]; 如: $("#id&qu ...

  9. java动态获取WebService的两种方式(复杂参数类型)

    java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...

随机推荐

  1. tp中打印sql,查看语句信息

    $a = self::where($where)->fetchSql(true)->select(); dump($a);

  2. PHP之Memcache和Memcached

    本篇文章向大家介绍的是PHP中的Memcache和Memcached ,有兴趣的朋友可以看一下 **Memcache介绍:**Memcache是一套分布式缓存系统,分布式就是说可以在多台服务器上同时安 ...

  3. nginx 记录

    正则 ~ 区分大小写匹配 ~* 不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 ^ 以什么开头的匹配 $ 以什么结尾的匹配 转义字符\ 可以转. * ?等 * 代表任意字符 ...

  4. linux rtc中废弃的接口和新的接口

    1. 废弃的接口 rtc_tm_to_time 2. 替换废弃接口的新接口 rtc_tm_sub

  5. JDBC的异常处理方式

    A: try...catch(...) {...} finally {} B: 关闭ResultSet,Statement , Connection import java.sql.Connectio ...

  6. osgViewer应用基础

    #ifdef _WIN32#include <windows.h>#endif#include <osgViewer/Viewer>#include <osgDB/Rea ...

  7. Git Command之Code Review

    原文链接 准备 Step 1. Create a team and add a teammate Step 2. Create a repository with some content 应用 Cl ...

  8. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_24-CMS前端页面查询开发-使用钩子方法实现立即查询

    进入页面默认就去查询数据 这要用到vue的钩子函数,每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听. 编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等. ...

  9. Spark + sbt + IDEA + HelloWorld + MacOS

    构建项目步骤 首先要安装好scala.sbt.spark,并且要知道对应的版本 sbt版本可以在sbt命令行中使用sbtVersion查看 spark-shell可以知晓机器上spark以及对应的sc ...

  10. systemctl daemon-reload

    systemctl daemon-reload: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载. init 和 sy ...