1) 进一步讨论定义在构造器内部的public method 与 定义在prototype上的public method.
Person = (function() {
return function() {
// Private instance methods
var name = "handy";
var age = "18";
// Public instance methods
this.getInfo = function() {
return name + " had been " + age + " years old.";
};
}
})();
上面的这种方式就是定义在构造器内部的public method. 这种方式对于JAVA, Objective-C
等纯面向对象语言的developers来说很习惯, 但是它有一个不好的地方就是当new多个Person实例时,
会在内存中创建多个getInfo这个function的实例,尤其当getInfo这个function做的是一些复杂逻辑、代码量大的时候,相应占的
内存就是一个function的N倍。于是引出了另一种定义public method的方式。如下:
Person = (function() {
return function() {
// Private instance methods
var name = "handy";
var age = 18;
}
})();
Person.prototype = {
getInfo : function() {
// It's wrong. Can't access name and age variable, because of scope.
return name + " had been " + age + " years old.";
}
};
这种方式的好处就是当在new多个Person实例时,
getInfo只会在内存中创建一份。不好的地方就是不能访问私有成员。只能通过调用public
method来访问私有成员,再对私有成员进行操作。如下:
Person = (function() {
return function() {
// Private instance methods
var name = "handy";
var age = 18;
this.getName() {
return name;
}
this.getAge() {
return age;
}
}
})();
Person.prototype = {
getInfo : function() {
return this.getName() + " had been " + this.getAge() + " years old.";
}
};
所以,个人体会是:如果一个public method做的事少,代码量小,可以放到构造器内部定义,这样代码要整洁一些;如果public
method做的事多且代码量大,那么最好还是定义到prototype里。
最后,还有一种方式来代替在构造器里定义操作数据的method.当然这种method就不是public的了,它是private static
里。如下:
Person = (function() {
// Assume these functions do complex logics and huge codes.
var operations = {
getInfo : function(name, age) {
return name + " had been " + age + " years old.";
}
};
return function() {
// Private instance methods
var name = null;
var age = 0;
this.getName() {
return name;
}
this.getAge() {
return age;
}
this.getDetail() {
return getInfo(name, age);
}
}
})();
采用以上这种方式后,每new一个Person实例后,operations是一个静态的对外不可见的变量,所以里面的方法在内存中都只有一份。
最后总结,个人推荐最后一种方式。
2) this的小论。
i)
在一个不属于任何类的functioin中访问this,此时this表示window。如下validityCheck方法:
Person = (function() {
// Assume these functions do complex logics and huge codes.
var operations = {
getInfo : function(name, age) {
return name + " had been " + age + " years old.";
}
};
return function() {
// Private instance methods
var name = null;
var age = 0;
this.getName() {
return name;
}
this.getAge() {
return age;
}
this.getDetail() {
return getInfo(name, age);
}
function validityCheck() {
// Do some check jobs.
alert(this.toString());
}
}
})();
这时alert出来的内空就是window.
ii) 在构造器里访问this时,this表示的是类的实例。如下所有的get方法:
Person = (function() {
// Assume these functions do complex logics and huge codes.
var operations = {
getInfo : function(name, age) {
return name + " had been " + age + " years old.";
}
};
return function() {
// Private instance methods
var name = null;
var age = 0;
this.getName() {
return name;
}
this.getAge() {
return age;
}
this.getDetail() {
return getInfo(name, age);
}
}
})();
所以这些get方法可以通过实例访问到也就是public method.
分享到:
相关推荐
这本书《Learning PHP, MySQL and JavaScript with jQuery, CSS and HTML5》是针对初学者介绍几种关键的Web开发语言的入门级教材。在Web开发领域,PHP、MySQL、JavaScript、jQuery、CSS和HTML5是非常重要的技术栈,...
JavaScript developers looking to enhance their web developments skills by learning object-oriented programming. What You Will Learn Get acquainted with the basics of JavaScript language constructs ...
<title>Learning Javascript <p>Hello World! <script type='text/javascript'> // Your script goes here. ``` 将此文件保存为 HTML 文件后,在浏览器中打开即可查看结果。由于 JavaScript 是解释型语言...
目录学分 关于你这个地方对你有用,如果你了解 JavaScript 基础知识不知道任何 OOP 或至少 JavaScript 特定的 OOP 故事有一个小小的世界,里面住着一只狗、一只猫、一个女人、一个男人,有时还有一个猫女。...
Learning Object-Oriented Programming is an easy-to-follow guide full of hands-on examples of solutions to common problems with object-oriented code in Python, JavaScript, and C#. It starts by helping ...
"Learning-oop-master" 文件夹中可能包含了各种 OOP 实例、练习和解决方案,通过这些资源,你可以深入了解 JavaScript 中的面向对象编程,并提升自己的编程技能。实践中,不断尝试创建、继承和封装不同的类,以及...
- JavaScript支持原型继承和类继承两种方式实现OOP。 - 类(class)是ES6中引入的新特性,简化了面向对象编程的过程。 4. **实战篇**: - 本书提供了多个实际项目案例,如构建一个简单的网页游戏、实现一个动态网站...
Learning JavaScript will help you see the broader picture of web development. This book will take your imagination to new heights by teaching you how to work with JavaScript from scratch. It will ...
- JavaScript 支持多种编程范式,包括 OOP 和 FP。 - **函数式编程:** 使用纯函数和不可变数据结构。 - **面向对象编程:** JavaScript 通过原型链实现了面向对象编程。 **作用域的理解:** - **局部作用域:** ...
在JavaScript的世界里,"learning.js:与乔纳斯一起学习js" 这个资源可能是为了帮助初学者或有经验的开发者深化对JavaScript的理解而设计的。JavaScript是一种广泛应用于Web开发的编程语言,它允许动态交互性,是构建...
在本食谱示例中,您将学习Angular(用于构建前端Web应用程序...TypeScript是JavaScript的超集,具有强大的OOP抽象和可编译为JavaScript的强类型系统。 使用Angular,您可以使用强大的工具和设计模式来构建小型或大型Web
2. `src`目录:存放源代码,包括JavaScript文件,这些文件展示了如何用实际代码实现OOP。 3. `examples`目录:包含各种示例,让你通过实践来学习OOP。 4. `assets`目录:可能存储图片、音频或视频资源,用于增强教程...
在这个场景下,可能是使用Python、JavaScript或其他支持OOP的编程语言编写了一个脚本,该脚本能遍历Google云端硬盘和本地文件夹,找出指定类型的文件,然后根据预设规则(如文件名、文件类型等)将它们上传到Moodle...
2. **Ruby面向对象编程**:Ruby是面向对象编程(OOP)的语言典范,平台会深入讲解类、对象、继承、封装和多态等核心概念。学习者将学会如何创建自己的类,以及如何利用模块(module)实现代码复用。 3. **Ruby on ...
类是面向对象编程的基础,TypeScript支持ES6中的类语法,允许我们定义类、继承、构造函数以及访问修饰符,提供了更丰富的OOP特性。 5. **模块(Modules)** TypeScript引入了模块系统,可以使用import和export...
它使用现代JavaScript或TypeScript(保留与纯JavaScript的兼容性),并结合OOP(面向对象编程),FP(函数式编程)和FRP(函数响应式编程)的元素。 在宽敞,Nest使用了 ,但也提供了与其他各种库的兼容,例如 ,...
4. **类与对象**:PHP支持面向对象编程(OOP),包括类的定义(`class MyClass { ... }`)、属性(成员变量)和方法(成员函数)。你可以使用`new`关键字实例化对象,并通过`.`操作符调用对象的方法。了解`__...
2. **面向对象编程**:与Ruby和JavaScript不同,Java是一种严格的面向对象编程(OOP)语言。这意味着所有程序都由类和对象组成,每个对象都有其属性和行为。Java支持封装、继承和多态这三大面向对象特性。 3. **...