JavaScript学习笔记(四) 自定义构造函数和构造函数返回值
来源:互联网 发布:gif添加文字软件 编辑:程序博客网 时间:2024/04/30 00:18
自定义构造函数(Custom Constructor Functions)
除了对象字面量模式和内置的构造函数,你可以用你自己的构造函数创建对象;
var adam = new Person("Adam");adam.say(); // "I am Adam"这种新模式和Java里用Person类创建对象十分相像,语法非常相似,但在JavaScript中没有类这个概念,Person仅仅是一个构造方法;
Person构造方法的定义:
var Person = function (name) { this.name = name; this.say = function () { return "I am " + this.name; };};当你使用new关键字去调用构造方法时,在构造函数中会发生:
1.一个空对象会被创建,并且将this指针指向它,从函数的原型继承(有个指针指向函数的原型对象);
2.属性和方法被添加到this指向的对象;
3.this指向的新创建的对象在函数结束时会被隐式的作为返回值返回(如果没有其他对象被显式的返回);
背后就相当于下面代码一样:
var Person = function(name) { // create a new object // using the object literal // var this = {}; // add properties and methods this.name = name; this.say = function() { return "I am " + this.name; }; // return this;};
在这个例子中为了简单起见,say()方法被添加到this,结果就是每当你调用new Person()的时候就会在内存中创建一个新的函数;
这是很明显是没有效率的,浪费资源,因为say()方法从在所有实例中都是不变的;
更好的选择就是将这样的方法添加到Person的原型中;
Person.prototype.say = function() { return "I am " + this.name;};我们会在以后讨论更多的原型和继承,在这里,只要记住:将需要复用的成员(好比方法)放到原型中就可以了。
我们前面提到过,在构造方法中在背后就像下面一样:
// var this = {};但这不是我们看到的那么简单,因为空对象并不是真正的空,它会从Person构造函数继承,所以它更像:
// var this = Object.create(Person.prototype);我们会在以后讨论Object.create()。
构造函数的返回值(Constructor’s Return Values)
当你用new去调用构造函数,构造函数通常会返回一个对象;
默认它会返回this指向的对象,如果你不在构造函数中给this添加任何属性或方法,会返回一个空对象(除了从构造函数的prototype继承的属性);
构造函数会隐式的返回this,即使在函数中没有return语句,但你也可以选择返回其他任何对象;
在这个例子中,一个被that指向的对象被创建和返回:
var Objectmaker = function () { // this `name` property will be ignored // because the constructor // decides to return another object instead this.name = "This is it"; // creating and returning a new object var that = {}; that.name = "And that's that"; return that;};// testvar o = new Objectmaker();console.log(o.name); // "And that's that"
正如你看到的,你可以在构造函数中返回任何其他对象,只要它是个对象;
当你尝试去返回非对象的时候(string,boolean)不会引起错误,只会被简单的忽略,替代的返回的是this指向的对象。
- JavaScript学习笔记(四) 自定义构造函数和构造函数返回值
- 【javascript笔记】关于函数的构造函数和prototype<四>
- JavaScript自定义构造函数
- javascript设计模式和构造函数返回值
- C++学习笔记(四):构造函数
- JavaScript构造函数返回值问题
- JavaScript构造函数返回值问题
- JavaScript学习笔记(十三) 返回函数和"自定义"函数
- javascript 学习笔记3-构造函数、类和原型
- 构造函数 返回值
- C++学习笔记(构造函数和拷贝构造函数)
- JavaScript学习笔记(五) 让函数成为构造函数
- 构造函数的返回值
- 构造函数返回值问题
- javascript 构造函数和方法
- javascript 构造函数和方法
- 构造函数和析构函数为何没有返回值
- Javascript学习笔记(二)Javascript核心之类,构造函数和原型
- hdu 4292(拆点的网络流)
- 快速幂取模
- python import的用法
- 面试小问题
- CSS样式学习_1
- JavaScript学习笔记(四) 自定义构造函数和构造函数返回值
- Android应用---简易计算器
- 如何在Wordpress主题Twentyeleven的header中增加自己的图片并随机切换
- python知识点汇总
- jQuery基础教程之强大的选择器(层次选择器)
- 用完美主义的标准开始做一件事
- phonegap开发hybrid app
- CodeForces 219C Color Stripe
- 最大连续子数列和问题