`

JS constructor 备忘录

阅读更多
Javascript确实是很烦人, 但也很诱人

这次记录constructor, 与之相关的, 还有typeof, ==, ===

试测测以下代码的结果
function demo(){
var str1="abc";
var str2=new String("abc");
var str3=new Array("abc");

alert(typeof str1);
alert(typeof str2);
alert(typeof str3);

alert(str1.constructor);
alert(str2.constructor);
alert(str3.constructor);

alert(str1 instanceof String);
alert(str2 instanceof String);
alert(str3 instanceof Array);

alert(str1==str2);
alert(str1==str3);
alert(str2==str3);

alert(str1===str2);
alert(str1===str3);
alert(str2===str3);
}

结果为

string
object
object

function String(){...}
function String(){...}
function Array(){...}

false  //*1, string比较麻烦
true
true

true
true
false //*2, 2个实例进行==运算, 肯定false, 哪怕重写prototype valueOf()和toString()

false
false
false

*1, string在JS里很麻烦, 介于基本类型和对象之间, typeof "abc" -> string
"abc".constructor也是function String(){...}
但, "abc" instanceof String 却又是false, 在没有进一步了解之前, 权当是历史遗留问题吧

*2, ==运行, 对象跟string(非String)时, 会先调用对象的valueOf取值, 如果没有valueOf, 则调用toString, 然后跟string对比, 但Date对象是先toString, 然后才是valueOf

实例验证

	function demo(){
		var A=function(n){
			this.name=n;
		}
		A.prototype.valueOf=function(){return this.name;}
		A.prototype.toString=function(){return "A: "+this.name;}
		var B=function(n){
			this.name=n;
		}
		B.prototype.valueOf=function(){return this.name;}
		B.prototype.toString=function(){return "B: "+this.name;}
		var c="david";
		var a=new A("david");
		var b=new B(c);
		alert(c==a);
		alert(c==b);
		alert(a==b);
	}


结果:
true
true
false
看见上面的结果了吧, 有够烦人的




下面还有, 但好理解一点, 关于继承的

	function demo(){
		var A=function(name){
			this.name=name;
		}
		A.prototype.showName=function(){alert(this.name);} //the function return this, "this" is the pointer of instance
		A.prototype.showSex=function(){alert("male");}
		A.prototype.city="shenzhen";

		var B=function(name, age){
			A.call(this, name);
			this.age=age;
		}
		B.prototype=A.prototype;
		B.prototype.showAge=function(){alert(this.age);}

		var b=new B("david", 31);
		
		try {
			alert(b.constructor);		//*1
			alert(b.constructor==A);	//*2
			alert(b.constructor==B);	//*3
			alert(b instanceof A);		//*4
			alert(b instanceof B);		//*5
		} catch (exception) {
			alert(exception);
		}
	}


结果是

1:function A{this.name=name;}
2:true
3:false //构造器指针指向A
4:true
5:true

分享到:
评论

相关推荐

    Java反射备忘录

    在“Java反射备忘录”中,我们可能探讨了以下核心概念: 1. 反射机制的基本概念:Java反射提供了一种在运行时分析类和对象的能力,使得程序能够动态地创建对象、调用方法、访问和修改字段值,即使这些信息在编译时...

    JavaScript的constructor属性[文].pdf

    JavaScript constructor 属性在类型检查中的应用 在 JavaScript 中,constructor 属性是一种非常有用的工具,可以帮助我们检查变量的类型。Constructor 属性可以帮助我们解决 typeof 函数无法解决的问题,即无法...

    JS:typeof instanceof constructor prototype区别

    在JavaScript(JS)编程语言中,确定变量或对象的类型是一项基本且重要的任务。这不仅有助于理解代码的行为,还能在调试、数据验证以及实现特定功能时提供帮助。本文将深入探讨四种常用的方法来识别和判断JavaScript...

    JavaScript中constructor()方法的使用简介

    在JavaScript编程语言中,constructor()方法是一个非常重要的概念,它属于对象的一个属性,用于指明创建该对象的构造函数。对初学者来说,理解constructor()方法是学习JavaScript对象和原型链的基础。 首先,...

    js-constructor:JavaScript

    JavaScript是一种广泛应用于网络开发的高级编程语言,尤其在构建交互式网页和动态网站时不可或缺。JavaScript的核心在于其面向对象的特性,其中构造函数是理解这一特性的重要概念。本篇文章将深入探讨JavaScript中的...

    java反射之Constructor

    Java 反射之 Constructor Java 反射机制中的 Constructor 类提供了关于类的单个构造方法的信息,包括对它的访问权限、Class 获取构造函数的方式等。下面将详细讲解 Constructor 类的概述、获取构造函数的方式、构造...

    javascript new后的constructor属性.docx

    ### JavaScript中的`new`操作与`constructor`属性详解 #### 一、`new`操作符的理解 在JavaScript中,`new`操作符被用于创建一个由构造函数定义的新实例对象。当使用`new`关键字调用一个构造函数时,会执行以下步骤...

    深化浅析JavaScript中的constructor_.docx

    深化浅析JavaScript中的constructor_ constructor 属性是 JavaScript 中的一种特殊属性,它返回对创建此对象的数组函数的引用。下面我们来深入浅析 JavaScript 中的 constructor。 constructor 属性是一个非标准...

    C++程序 日历记事本

    在实际运行中,用户可以通过程序提供的菜单选择不同的操作,如添加新的备忘录、查看已有备忘录、查询特定日期的事件,或者进行农历与公历之间的转换。通过这种方式,用户可以方便地管理和记录他们的日常事务。

    Javascript的构造函数和constructor属性

    例如,在Chrome下调试如下程序,很清楚的展示了这点:   然而事情并不是这么简单。再看下面的代码: 很显然,这个时候obj的constructor已经不再是创建它的函数,注意... 我觉得Javascript的设计本意是让每个对象的con

    js核心基础之构造函数constructor用法实例分析

    JavaScript中的构造函数是用于创建特定类型对象的特殊函数。它们在对象实例化过程中起到了核心作用,使得我们可以定制对象的属性和方法。构造函数通常与`new`操作符一起使用,以便于初始化新创建的对象。 1. **构造...

    Android代码-Watchface-Constructor

    Watchface-Constructor Please check [our article] (https://yalantis.com/blog/building-a-customizable-constructor-for-designers-of-android-wear-watch-face-apps) This is simple watchface constructor ...

    boa-constructor入门介绍

    boa-constructor是一款基于Python语言,使用wxPython库构建图形用户界面(GUI)的应用程序开发工具。它为非专业程序员提供了一种直观、易用的可视化界面来设计和编写GUI程序,降低了开发复杂度,尤其适合初学者入门...

    boa-constructor-0.6.1. for python2.5

    "boa-constructor-0.6.1 for Python2.5" 是一个专为Python 2.5版本设计的集成开发环境(IDE),主要用于图形化构建应用程序的用户界面(UI)。Boa Constructor是一款开源软件,它提供了对Python程序员来说非常友好的...

    深入浅析JavaScript中的constructor

    在JavaScript中,`constructor`属性是一个非常重要的概念,它与对象和类的构造函数紧密相关。构造函数是一种特殊类型的函数,通常用于初始化新创建的对象。当我们谈论`constructor`时,我们指的是一个对象实例的`...

    JavaScript constructor和instanceof,JSOO中的一对欢喜冤家

    至少每个尝试JavaScriptOO的程序员都花费很多精力用在面向对象机制的模拟上而非业务本身. 这对Java,C++甚至Php的开发者来讲都是难以想象的. 更糟糕的是模拟OO对于JavaScript高级程序员都有着邪恶的吸引. 因为干这个...

    JavaScript精炼之构造函数 Constructor及Constructor属性详解

    对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数,除了创建对象,构造函数(constructor) 还做了另一件有用的事情—自动为创建的新对象设置了原型对象(prototype object)

    js constructor的实际作用分析

    代码如下: [removed] Function.prototype.... }[removed] 说下上面代码里面 T.constructor = this这句话,我感觉这句话没有什么实际作用, 本身T.constructor应该是为Funtion,为什么要给它设定为Funtion的实例呢,

    js-konstr:JavaScriptConstructor

    JavaScriptConstructor,或者简称"js-konstr",是一种在JavaScript中创建对象的构造函数机制,它是面向对象编程的基础。在JavaScript中,构造函数主要用于初始化一个新创建的对象,它定义了对象的属性和方法。理解这...

Global site tag (gtag.js) - Google Analytics