在运行时添加新方法

时间:2014-12-02 09:11:31

标签: javascript

我们是否可以在运行时添加新方法。

在Java中,我们可以执行此操作 stack overflow

我只是想通过使用JavaScript来了解它?

5 个答案:

答案 0 :(得分:1)

Javascript是动态的,没有涉及编译(除了浏览器中的JIT编译,可能),所以像这样的东西实际上是微不足道的,需要在运行时发生:

someObject.newMethod = function(s) { console.log("haha") }

这会向对象newMethod添加新方法someObject。 使用原型,您可以在一个步骤中向多个实例添加方法 - 它们将立即可用于该原型的所有实例。

答案 1 :(得分:0)

函数是JavaScript中的一等公民 从Chrome执行以下代码并查看控制台输出;

第一次会看到错误“TypeError:undefined id not a function”,因为hello函数不存在。

第二次没有错误,我们将获得“Hello Exits”

var object = {};

try {
    object.hello("Does not exit");
}
catch(err) {
    console.log(err);
}

object.hello = function(name){
   console.log("Hello " + name);
}

try {
    object.hello("Exits");
    console.log("No error");
}
catch(err) {
    console.log(err);
}

答案 2 :(得分:0)

我认为你的意思是动态添加代码?

在javascript中执行此操作实际上更容易。 可以使用eval函数完成。

用法:

eval('code to be run');

示例:

HTML

<p id="para">this is a paragraph</p>

的JavaScript

eval('document.getElementById("para").innerHTML = "this is a changed paragraph"');

注意eval函数中的javascript是一个字符串。 eval接受一个字符串并将其评估为javascript。

警告,假设您在客户端使用javascript,这是非常气馁的。 eval将从任何地方获取并运行代码,这被视为安全风险。 如果您使用use strict,则不允许使用eval。

答案 3 :(得分:0)

在JavaScript中,我们将函数作为第一类对象,您可以轻松地操作它们。结合对象是基于原型而不是基于类的事实,您可以轻松地向对象添加方法。或者对象的原型:

//add function to one object :

var object = {};

object.sayHello = function(){
  alert("hello");
};

object.sayHello();

//add function to a prototype

//our constructor
function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;    
}

var p = new Person("John", "Doe");

Person.prototype.sayMyName=function(){
  alert("My name is "+this.firstName+ " " + this.lastName);
};

//now all persons can say their name

p.sayMyName();

p2 = new Person("Isaac", "Newton");

p2.sayMyName();

玩{是jsbin

答案 4 :(得分:0)

JavaScript没有生成compile文件的.class阶段。 JS代码在运行时由浏览器解释。添加动态函数非常简单,很难记住/找到对象上可用的函数数量。

例如,地球范围内有一个对象globalObj。在档案a.js中:

globalObj.a = function () { console.log('from a.js'.); }

在档案b.js中:

globalObj.b = function () { console.log('from b.js'.); }

在包含数百个JS文件的项目中,您可能很容易迷路。 IDE也面临同样的问题。