定义在函数的prototype上的属性不会被序列化

  • 可以看下面的代码:

function A(name) {

   this.name = name;

}

A.prototype.sayWhat = ‘say what...‘;

 

var a = new A(‘dreamapple‘);

console.log(JSON.stringify(a));

我们可以看到输出结果是{“name”:”dreamapple”}。

时间: 2024-07-31 12:45:51

定义在函数的prototype上的属性不会被序列化的相关文章

函数内的方法和prototype上的方法对比

函数内的方法: 使用函数内的方法我们可以访问到函数内部的私有变量,如果我们通过构造函数new出来的对象需要我们操作构造函数内部的私有变量的话, 我们这个时候就要考虑使用函数内的方法. prototype上的方法: 当我们需要通过一个函数创建大量的对象,并且这些对象还都有许多的方法的时候;这时我们就要考虑在函数的prototype上添加这些方法. 这种情况下我们代码的内存占用就比较小. 在实际的应用中,这两种方法往往是结合使用的;所以我们要首先了解我们需要的是什么,然后再去选择如何使用.

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上。

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上.当然,在某些情况下,我们需要将某些方法定义在构造函数中,这种情况一般是因为我们需要访问构造函数内部的私有变量.

函数原型prototype以及对象的隐式原型__prot0__的基本了解

prototype原型: 一. 函数与对象的关系    1. 函数是对象的一种(函数是对象类型)        例: function fn1(){.........}           console.log(fn1 instanceof Object);           返回true,说明函数(fn1)是对象类型. 2. 对象是由函数创建的       例: var obj = new Object();           var arr = new Array(3);       

JavaScript函数及其prototype

一.定义 函数可以通过声明定义,也可以是一个表达式. (1)函数声明式: 分号是用来分隔可执行JavaScript语句,由于函数声明不是一个可执行语句,所以不以分号结束. function a(){ console.log('bbb'); } (2)函数表达式: 函数表达式以分号结尾,因为它是一个执行语句. var a = function(){ console.log('aaa'); } (3)声明式变体: var a = function a(){ console.log('bbb'); }

prototype 以及 constructor 属性的理解

1 为什么 xx.constructor.prototype 可以访问到当前对象的原型. 'str'.constructor.prototype 'str'.constructor 指向当前对象的构造函数 (构造函数).prototype:即函数的prototype 属性 1 函数有prototype属性,所以可以访问到 2 函数的prototype属性会在创建实例的时候作为实例的原型而存在. 所以 'str'.constructor.prototype 就可以访问到当前对象实例的原型. 1 '

Effective JavaScript Item 34 在prototype上保存方法

本系列作为EffectiveJavaScript的读书笔记. 不使用prototype进行JavaScript的编码是完全可行的,例如: function User(name, passwordHash) { this.name = name; this.passwordHash = passwordHash; this.toString = function() { return "[User " + this.name + "]"; }; this.checkP

js面向对象编程: js类定义函数时prototype和this区别?

在面向对象编写js脚本时,定义实例方法主要有两种 如下: function ListCommon2(afirst) { var first=afirst; this.do1=function () { alert("first do"+first); } } ListCommon2.prototype.do2=function() { // alert("first do"+first);//会出错,不能访问first this.do1(); } this.do1=

静态变量和函数、实例变量和函数以及prototype 说明

静态变量.函数 当定义一个函数后通过 “.”为其添加的属性和函数,通过对象本身仍然可以访问得到,但是其实例却访问不到,这样的变量和函数分别被称为静态变量和静态函数,用过Java.C#的同学很好理解静态的含义. 1 function Obj(){ 2             } 3 4             Obj.a=0; //静态变量 5 6             Obj.fn=function(){ //静态函数 7 8             } 9             conso

jquery的data()函数和html5的data属性

jquery的data()函数和html5的data属性:在html5中新增了一个自定义data属性,利用这个属性,可以添加任意的以"data-"开头的属性,这些属性不会再页面上显示,也不会影响任何原有的布局效果,并且此自定义属性是可读写的,例如: <div id="thediv" data-webname="蚂蚁部落">蚂蚁部落欢迎您</div> 以上代码就是使用自定义data属性的一个简单例子.可以使用jquery的d