JavaScript中的对象模型(object model)并不广为人知。我曾写过一篇关于他们的博客。之所以不被人所熟知,原因之一就是JavaScript是这些被人广泛使用的语言中唯一一个通过原型(prototype)来实现继承的。但是,我认为另一个原因就是这种对象模型非常复杂,难于解释。它为什么这么复杂并且又令人困惑呢?那是因为JavaScript试图去隐藏它传统的面向对象的特性——最终导致了它的双重人格(译者注:作者意思是JavaScript既有面向过程的特...
兴致勃勃地定义了下面这么个构造函数: 代码如下:var Coder = function( nick ){ this.nick = nick; }; 定义构造函数结束后呢?没错,赶紧实例化: var coder = Coder( casper ); 这个coder兄弟叫什么名字?赶紧打印下: 代码如下:console.log( coder.nick ); //undefined = =b 竟然是undefined!!再回过头看看实例化的那个语句,不难发现问题出在哪里:少了个new var coder = Coder( casper ); //当作普通的函数来调用,故内部...
我们将使用构造函数模式将工厂模式进行改写。 代码如下:function Employee(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(this.name); }; } var Jim = new Employee("jim", 22, "SoftWare Engineer"); var Sun = new Employee("Sun", 24, "Doctor"); Jim.sayName(); Sun.sayName(); 在以上代码中Employee函数取代了CreateEmployee函数,Employee中的代码与CreateEmp...
在网上看了很多JavaScript的项目, 用到对象都是采用{}的形式: 例如jQuery, TinyMCE等都是形如: 代码如下:var Dialog = { int : function() { .... }, insert : function() { .... }, pop : function() { .... } }; //调用就是: Dialog.init(); 而我自己一直使用function闭包的方式, 感觉使用内部私有成员(函数,变量)更方便: 代码如下:function classDialog() { var box = "sdfsdf"; //init, insert等函数中调用公共变量就会很方...
上回说到《JavaScript 原型继承之基础机制》,这一篇将具体说说构造函数的继承。 从一个简单的示例开始,创建描述人类的 People 构造函数: 代码如下:function People(){ this.race = 愚蠢的人类; } 然后,创建描述黄种人的 Yellow 构造函数: 代码如下:function Yellow(name, skin){ this.name = name; this.skin = skin; } 要使得黄种人 Yellow 能继承人类 People 对象,在 JavaScript 中可以通过多种方式模拟实现。 1、对象...
代码如下://首先创建父类 function Person(name, age, address) { this.name = name; this.age = age; this.address = address; } //创建子类 function Student(score) { this.score = score; //可以用call方法或者是apply方法调用函数的构造函数 //调用父类的构造函数,通过call方法调用Person类的构造函数。这样就会在student中初始化Person对象,student也就有了Person的属性的副本 Person.call(this,"zhangsan",22,"中国北京!...
代码如下:function A(x) { this.x = x; } var obj = new A(5); alert(obj.x); 这段代码十分简单,但是我们重要的是看到了一个十分惊讶的结果,obj被我们赋予了一个属性x,就如同我们在C#中使用某个类的实例的时候一样。那么这个属性是怎么样产生的呢? 关键语句:this.x=x。这句话就是进行一个属性的申明与赋值,这里,我们肯定会问到,this是什么?为什么可以使用this.x来进行申明与赋值属性呢? 其实this代表的就是我们刚刚实例...
Javascript中创建对象的语法是在new运算符的后面跟着一个函数的调用。如 代码如下:var obj = new Object(); var date = new Date(); 运算符new首先创建一个新的没有任何属性的对象,然后调用该函数,把新的对象作为this关键字的值传递。 代码如下:var date = new Date()的伪代码的实现就是 var obj = {}; var date = Date.call(obj); 构造函数的作用就是初始化一个新创建的对象,并在使用对象前设置对象的属性。如果定义自己的...
例如,在Chrome下调试如下程序,很清楚的展示了这点: 然而事情并不是这么简单。再看下面的代码: 很显然,这个时候obj的constructor已经不再是创建它的函数,注意到obj.name也是undefined,因此修改构造函数的prototype的contructor并不会影响构造函数所产生的对象。真正的原因是:一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性...
我们日常JS编程中最常用的方式 有下面2种: 1.混合的构造函数和原型方式 (重点) 代码如下:function car (sColor,iNumbers){ // 构造函数只用来定义对象的所有非函数属性,即对象的属性 this.color = sColor; this.numbers = iNumbers; this.dirvers = new Array ("Jone","Leon"); } car.prototype.showColor = function (){ // 原型方式只用来定义对象的所有函数属性,即对象的方法 alert(this.color); } var car1 = new car("r...
代码如下://构造函数 function myClass(message) { //公有属性 this.myMessage = message; //私有属性 var _separator = -; var _myOwner = this; //私有方法 function showMessage() { alert(_myOwner.myMessage); } //特权方法(也是公有方法) this.appendToMessage = function(appendMessage) { this.myMessage += _separator + appendMessage; showMessage(); } } //公有方法 myClass.prototype.clearMessage = function() { t...
JQuery优点 ?体积小(v1.2.3 15kb) ?丰富的DOM选择器(CSS1-3 + XPath) ?跨浏览器(IE6,FF,Safari,Opera) ?链式代码 ?强大的事件、样式支持 ?强大的AJAX功能 ?易于扩展,插件丰富 jQuery的构造函数接收四种类型的参数: jQuery(expression,context) jQuery(html) jQuery(elements) jQuery(fn) 第一种根据表达式(ID,DOM元素名,CSS表达式,XPath表达式)找出文档中的元素,并组装成一个jQuery对象返回。 DEMO: jQuery basic .se...
/* *(REFER TO <JAVASCRIPT CORE>P151) *@time 2008-11-25 */ 代码如下://没有返回值 function Test0(){ this.name='test0'; } var test0=new Test0; //debugger; alert(test0);//输出[Object] alert(test0.name);//输出test0 //return 一个字符串对象 function Test(){ this.name='test'; return new String('123');// 返回字符串对象 } var test=new Test(); alert(test);//输出123 alert(test.name);//输出undefined,说明有构...
JavaScript学习8:类、构造函数和原型、ES5新增方法 文章目录 一、类二、构造函数和原型(ES6之前)三、ES5新增的方法一、类三个特性:封装性、继承性、多态性 ES6中的类和对象 基本使用:<script>//创建类 函数不用写function 不用加,分隔class Star {constructor(uname, age) { //构造函数 new的时候自动调用,返回实例对象this.uname = uname;this.age = age;}sing(song) {console.log(this.uname + song);}}//创建对象var...
实现构造函数中重写toString() 的方法: 首先,对象的原始的toString()函数是位于该对象的原型的原型对象中的,我们只要在该对象的原型中新建一个toString()函数就可覆盖对象的原始的toString()函数。 对于如何判断toString()函数是位于一个对象的原型的原型对象中,可以使用以下方法判断(以Person对象举例): var p = new Person(); console.log(p.__proto__.__proto__.hasOwnProperty("toString"));//返回值为true以下是重写toSt...