Javascript的类和原型
来源:互联网 发布:银行大劫案 知乎 编辑:程序博客网 时间:2024/06/05 23:48
1.在Javascript中,类的所有实例对象都是从同一个原型对象上继承属性。因此,原型对象是类的核心。
2. 使用关键字new来调用构造函数。使用new调用构造函数会自动创建一个新对象,因此构造函数本身只需初始化这个新对象的状态即可。调用构造函数的一个重要特征是,构造函数的prototype属性被用作新对象的原型。这意味着通过同一个构造函数创建的所有的对象都继承自一个相同的对象,因此它们都是同一个类的成员。
例 1-01:
/**
* 定义Person类,下面是Person类的构造函数,此时并没有创建并返回一个对象,仅仅是初始化
*/
function Person(name, age){
this.name = name;
this.age = age;
}
/**
* 所有的实例化对象都要继承这个原型对象,注意:属性的名字必须是prototype
*/
Person.prototype = {
say: function(){
alert(this.name + "," + this.age);
}
}
/**
* 实例化一个Person对象
*/
var dufu = new Person("Andy", 24);
dufu.say();
* 定义Person类,下面是Person类的构造函数,此时并没有创建并返回一个对象,仅仅是初始化
*/
function Person(name, age){
this.name = name;
this.age = age;
}
/**
* 所有的实例化对象都要继承这个原型对象,注意:属性的名字必须是prototype
*/
Person.prototype = {
say: function(){
alert(this.name + "," + this.age);
}
}
/**
* 实例化一个Person对象
*/
var dufu = new Person("Andy", 24);
dufu.say();
3. 注意:原型对象是类的唯一标识: 当且仅当两个对象继承自同一个原型对象时,它们才是属于同一个类的实例。而初始化对象的状态的构造函数则不能作为类的标识,两个构造函数的prototype属性可能指向同一个原型对象。那么这两个构造函数创建的实例是属于同一个类的。
4. 每一个Javascript函数都自动拥有prototype属性(Function.bind()放大返回的函数除外)。这个属性是一个对象, 这个对象包含一个不可枚举属性constructor。constructor属性的值是一个函数对象 :
例 1-02:
var F = function(){ }; //这是一个函数对象
var p = F.prototype; //这是F相关联的原型对象
var c = p.constructor; //这是与原型相关联的函数
c === F; //true, 对于任意函数F.prototype.constructor == F
5. JavaScript中Java式的类继承: Javascript和Java的一个区别在于,JavaScript中的函数都是以值的形式出现的,方法和字段之间没有太大的区别。如果属性值是函数,那么这个属性就定义一个方法;否则,它只是一个普通的属性或者“字段”。但是我们依然可以用Javascript模拟出Java中的这四种类成员类型(实例字段,实例方法,类字段,类方法)。
Javascript中定义一个类可以分为三步:
(1) 先定义一个构造函数,并设置初始化新对象的实例属性。
(2) 给构造函数的prototype对象定义实例的方法。
(3)给构造函数定义类字段和类属性。
6. 使用Object.seal() 函数可以锁定对象,阻止其属性被修改(阻止对象扩展),同时还将对象的所有属性将 configurable 特性设置为 false。需要注意的是,在JavaScript中,Object.freeze()可以祈祷同样的效果。
例 1-03:
/**
* 定义一个构造函数用于测试Object.seal()的用法
*/
function A(m, n){
this.m = m;
this.n = n;
}
var a = new A(22, 23); //实例化一个新的对象a
Object.seal(a); //阻止修改现有属性的特性,并阻止添加新属性。
a.x = 20; // 为对象a添加一个新的属性 x
console.log(a.x); // undefined
* 定义一个构造函数用于测试Object.seal()的用法
*/
function A(m, n){
this.m = m;
this.n = n;
}
var a = new A(22, 23); //实例化一个新的对象a
Object.seal(a); //阻止修改现有属性的特性,并阻止添加新属性。
a.x = 20; // 为对象a添加一个新的属性 x
console.log(a.x); // undefined
0 0
- Javascript的类和原型
- Javascript的类,构造函数和原型
- JavaScript中的类和原型的理解
- JavaScript的原型和原型链
- Javascript中对象的原型和对象的原型对象
- javascript中Object类原型对象的属性和方法
- Javascript类-构造方法和原型方法的区别
- 从本质认识JavaScript的原型继承和类继承
- 征服 JavaScript 面试:类继承和原型继承的区别
- javascript原型和原型链
- Javascript原型和原型链
- JavaScript原型和原型链
- Javascript原型和原型链
- Javascript原型和原型链
- JavaScript原型和原型链
- JavaScript原型和原型链
- JavaScript原型和原型链新解
- javascript 原型和原型链
- 1.Animation的使用 - 使用动画创建一个不同的登陆界面
- 机器学习--监督模式和非监督模式
- redis server配置文件参数说明
- 四十岁后才明白的道理,你可以现在就知道!
- Android GUI 之编辑框(EditText)与监视器
- Javascript的类和原型
- mysql jdbc驱动源码分析(获取Statement对象)
- centos安装mysql5.7.10
- JavaScript正则表达式的模式匹配
- C语言中的可变参数函数 三个点“…”
- File.AppendAllText 方法 (String, String)
- git 新人服务器搭建
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
- 互斥量、临界区、信号量、事件标志组和消息邮箱(转)