下面是针对"Javascript 面向对象(一)(共有方法,私有方法,特权方法)"的详细讲解:
什么是面向对象编程?
面向对象编程是一种编程思想,它将数据和操作数据的行为封装在一起,形成一种对象。在面向对象编程中,对象都有自己的状态和行为,对象之间通过调用彼此的方法来进行协作完成任务。
在Javascript中,可以使用对象字面量或者构造函数创建对象。对象字面量是一种简单、快速的创建对象的方式,如下示例:
var person = {
name: "Tom",
age: 20,
sayHello: function() {
console.log("Hello, my name is " + this.name + ", I am " + this.age + " years old.");
}
};
person.sayHello(); // 输出:Hello, my name is Tom, I am 20 years old.
构造函数是一种创建对象的高级方式,使用构造函数创建的对象都有一个共同的原型对象,并且可以通过原型继承的方式共享其方法。下面是一个使用构造函数创建对象的示例:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name + ", I am " + this.age + " years old.");
};
var person = new Person("Tom", 20);
person.sayHello(); // 输出:Hello, my name is Tom, I am 20 years old.
共有方法
共有方法也叫做实例方法,是所有对象实例都可以访问的方法。共有方法通常定义在构造函数的prototype属性中。下面是一个使用构造函数定义共有方法的示例:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name + ", I am " + this.age + " years old.");
};
var person = new Person("Tom", 20);
person.sayHello(); // 输出:Hello, my name is Tom, I am 20 years old.
在这个示例中,我们使用Person构造函数创建了一个person对象,然后通过调用person的sayHello方法来输出person对象的信息。
私有方法
私有方法也叫做实例私有方法,只有在构造函数内部才能访问的方法。私有方法不会定义在构造函数的prototype属性中,而是直接定义在构造函数内部。下面是一个使用构造函数定义私有方法的示例:
function Person(name, age) {
this.name = name;
this.age = age;
function printName() {
console.log("My name is " + this.name);
}
this.sayHello = function() {
printName.call(this);
console.log("Hello, I am " + this.age + " years old.");
};
}
var person = new Person("Tom", 20);
person.sayHello(); // 输出:My name is Tom, Hello, I am 20 years old.
在这个示例中,我们使用Person构造函数创建了一个person对象,sayHello方法内部调用了一个私有方法printName。printName方法直接定义在构造函数内部,只能在构造函数内部访问,不能从外部访问。
特权方法
特权方法是一种介于共有方法和私有方法之间的方法,是在构造函数内部定义,但是可以被对象实例访问的方法,在ES6之前是Javascript中模拟私有方法的最好方式。特权方法通常使用this关键字定义,可以访问对象的私有属性,并提供一定程度的封装。下面是一个使用构造函数定义特权方法的示例:
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log(this.getName() + " is " + this.age + " years old.");
};
this.getName = function() {
return this.name;
};
}
var person = new Person("Tom", 20);
person.sayHello(); // 输出:Tom is 20 years old.
在这个示例中,我们使用Person构造函数创建了一个person对象,sayHello方法内部调用了一个特权方法getName。getName方法使用this关键字定义,可以访问对象的私有属性name,并返回name的值。
希望这篇攻略能够对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript 面向对象(一)(共有方法,私有方法,特权方法) - Python技术站