-
js对象私有变量公有变量问题5
小弟初学JS面向对象编程 现有一问题 请教各位大虾:
Person=function (){
//私有变量定义
var name;
vae age;
var Alert=function (){ alert(name+age);};
return {
printName:function(){ alert(this.Alert());},
printAge:function(){alert(thia.age);}
}
}
外部调用 Person person1=new Person();
person1.name="张三";
person1.age=20;
person1.printAge();//成功没有错误
person1.printName();//报错
请各位指点为什么在公有方法里 用this调私有变量都可以 调私有方法都出错?
问题补充:langshao 写道function WhoAmI() //定义一个函数WhoAmI { alert("I'm " + this.name + " of " + typeof(this)); }; WhoAmI(); //此时是this 当前这段代码的全局对象,在浏览器中就是window 对象,其name 属性为空字符串。 输出:I'm of object var BillGates = {name: "Bill Gates"}; BillGates.WhoAmI = WhoAmI; //将函数WhoAmI 作为BillGates 的方法。 BillGates.WhoAmI(); //此时的this 是BillGates。输出:I'm Bill Gates of object var SteveJobs = {name: "Steve Jobs"}; SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI 作为SteveJobs 的方法。 SteveJobs.WhoAmI(); //此时的this 是SteveJobs。输出:I'm Steve Jobs of object WhoAmI.call(BillGates); //直接将BillGates 作为this,调用WhoAmI。输出:I'm Bill Gates of object WhoAmI.call(SteveJobs); //直接将SteveJobs 作为this,调用WhoAmI。输出:I'm Steve Jobs of object 8 BillGates.WhoAmI.call(SteveJobs); //将SteveJobs 作为this,却调用BillGates 的WhoAmI 方法。输出: I'm Steve Jobs of object SteveJobs.WhoAmI.call(BillGates); //将BillGates 作为this,却调用SteveJobs 的WhoAmI 方法。输出: I'm Bill Gates of object WhoAmI.WhoAmI = WhoAmI; //将WhoAmI 函数设置为自身的方法。 WhoAmI.name = "WhoAmI"; WhoAmI.WhoAmI(); //此时的this 是WhoAmI 函数自己。输出:I'm WhoAmI of function ({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI 方法。输出:I'm nobody of object
谢谢你 答复的很详细 太感谢了。。。你有QQ吗可以加一下吗 以后向你请教2010年2月06日 23:12
2个答案 按时间排序 按投票排序
-
采纳的答案
function WhoAmI() //定义一个函数WhoAmI { alert("I'm " + this.name + " of " + typeof(this)); }; WhoAmI(); //此时是this 当前这段代码的全局对象,在浏览器中就是window 对象,其name 属性为空字符串。 输出:I'm of object var BillGates = {name: "Bill Gates"}; BillGates.WhoAmI = WhoAmI; //将函数WhoAmI 作为BillGates 的方法。 BillGates.WhoAmI(); //此时的this 是BillGates。输出:I'm Bill Gates of object var SteveJobs = {name: "Steve Jobs"}; SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI 作为SteveJobs 的方法。 SteveJobs.WhoAmI(); //此时的this 是SteveJobs。输出:I'm Steve Jobs of object WhoAmI.call(BillGates); //直接将BillGates 作为this,调用WhoAmI。输出:I'm Bill Gates of object WhoAmI.call(SteveJobs); //直接将SteveJobs 作为this,调用WhoAmI。输出:I'm Steve Jobs of object 8 BillGates.WhoAmI.call(SteveJobs); //将SteveJobs 作为this,却调用BillGates 的WhoAmI 方法。输出: I'm Steve Jobs of object SteveJobs.WhoAmI.call(BillGates); //将BillGates 作为this,却调用SteveJobs 的WhoAmI 方法。输出: I'm Bill Gates of object WhoAmI.WhoAmI = WhoAmI; //将WhoAmI 函数设置为自身的方法。 WhoAmI.name = "WhoAmI"; WhoAmI.WhoAmI(); //此时的this 是WhoAmI 函数自己。输出:I'm WhoAmI of function ({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI 方法。输出:I'm nobody of object
2010年2月07日 10:22
-
Person = function() { return { printName: function() { this.Alert.call(this); }, printAge: function() { alert(this.age); } } } function process() { //外部调用 person1 = new Person(); person1.name="张三"; person1.age=20; person1.Alert = function() { alert(this.name + this.age); }; person1.printAge(); person1.printName(); }
2010年2月07日 10:36
相关推荐
公有变量提供便利的访问,但可能导致数据安全问题;私有变量则提供良好的封装,保护数据不被滥用;静态变量则用于存储类级别的共享信息,节省内存。了解并熟练运用这些概念,是成为一名合格的C#开发者的基础。 以上...
### JavaScript 类中的公有变量与私有变量 在JavaScript中,理解类的公有变量与私有变量的概念对于编写高效、安全的代码至关重要。本文将通过具体的实例来深入探讨这两个概念,并解释它们如何影响对象的行为。 ###...
Java 反射访问私有变量和私有方法 Java 反射机制是 Java 语言中的一种强大的工具,使得我们可以在运行时装配代码,而无需在对象之间进行源代码链接,从而使代码更具灵活性。在实际测试中,我们经常需要访问类的非...
JavaScript私有变量是编程中一种重要的概念,它允许我们在函数或对象中定义变量,但限制了这些变量在函数或对象外部的访问。私有变量的使用有助于数据封装,防止外部代码直接修改内部状态,从而维护程序的稳定性和...
在这个例子中,`JSClass`是一个函数,其内部定义了私有静态变量和方法,并且返回了包含公有实例方法的对象字面量。公有实例方法`test1`用于返回私有静态变量的值,`test2`用于修改私有静态变量的值,而`test3`用于...
在ES6之前,JavaScript没有私有属性的语法,但可以通过一些技巧模拟私有性,比如使用函数作用域或者闭包来创建私有变量。示例代码如下: ```javascript function User(name, age) { var name = name; // 私有属性 ...
在JavaScript中,模拟类机制和创建私有变量是面向对象编程的常见需求。通过上述方法,我们可以利用JavaScript的语言特性来实现这些需求,从而让代码更加模块化和易于维护。需要注意的是,在使用这些技巧时,要避免...
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
在`parent`构造函数中,`pname`变量和`pfun`函数都是通过闭包创建的私有属性和方法,因为它们定义在函数内部,无法通过外部对象实例直接访问。 ```javascript var pname = "private"; var pfun = function() { ...
在模拟私有属性和方法时,我们可以使用闭包创建一个立即执行的函数表达式(IIFE),这样可以创建一个独立的作用域,其中包含私有变量和方法。例如: ```javascript var book = (function() { var page = 100; ...
由于公有方法无法直接访问私有变量和函数,因此需要特权方法作为桥梁。特权方法既可以从内部访问私有成员,又可以在外部调用: ```javascript function Container(param) { var secret = 3; function dec() { /...
### Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解 #### 1. 定义类 在Python中,面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它使得代码更加模块化、可重用,...
关键字private可以将类的成员说明为是私有的,它不能直接被对象访问。 其实,说白了是对于公有成员,我们可以利用对象来进行直接调用,比如说: class Cat { public: int weight; }; int main() { Cat ...
特权方法是公有方法中的一种特殊情况,它可以访问对象的私有变量和方法。特权方法通常用于在私有方法中实现一些公共接口,以供外部调用。特权方法的创建方式与公有方法类似,但在其内部可以访问私有变量或方法,例如...
本文将详细介绍由提供的代码片段所涉及的VB023类中的公有(Public)与私有(Private)成员变量及方法的概念及其应用。 #### 代码解析 首先,我们来解析一下给出的代码: ```vb Module Module1 Public Class Ա ...
python中,类内方法外的变量叫属性,类内方法内的变量叫字段。他们的私有公有访问方法类似。 class C: __name="私有属性" def func(self): print(C.__name) class sub_C(C): def info(self): print(C.__name)#...
编写构造方法,赋予 n1 和 n2 初始值,然后为该类定义加、减、乘、除等公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。 【练习题】05.构造方法:人类 人类是一个简单的 Java 类,包含姓名和年龄两个...
通常,我们将属性设为私有(private),并提供公有的getter和setter方法来访问和修改属性,确保数据的正确性。 4. **构造器**: 构造器是一种特殊的方法,用于初始化新创建的对象。在Java中,构造器与类名相同,...